Bài toán Permalink cho WordPress không phải blogger nào cũng nắm được hết và vận dụng hiệu quả trên blog của mình. Nên hôm nay tôi viết bài về vấn đề này để chia sẻ với mọi người về kinh nghiệm cũng như hiểu biết của tôi về Permalink trong WordPress. Hi vọng rằng bài viết này cung cấp cho các bạn một kiến thức đầy đủ hơn về Permalink để có thể vận dụng tốt cho blog của mình.
Phụ mục
Các định dạng Permalink của WordPress
Một cách trực quan và dễ hiểu, bạn truy cập vào Setting=>Permalink Settings bạn sẽ thấy một danh sách các định dạng Permalink được WordPress cung cấp sẵn như sau:
Ta có thể hiểu nó như sau:
- Default: đây là dạng mặc địch của WordPress sử dụng ID của bài viết để truy vấn loại này tuy không thân thiện cho các cỗ máy tìm kiếm(Search Engine – SE) nhưng giúp cho quá trình truy vấn được nhanh chóng và dễ dàng.
- Day and name: đây là kiểu kết hợp giữa định dạng định dạng ngày tháng và tên bài viết để tạo nên liên kết tới bài viết. Nhìn vào đây bạn dễ dàng tìm ra được ngày tháng viết bài và tên bài viết.
- Month and name: dạng này là dạng rút gọn hơn so với dạng Day and name ở trên.
- Numeric: đây là dạng tối ưu hóa URL theo kiểu rewrite nhưng sử dụng ID. Về căn bản nó giống như dạng Default nhưng bổ sung thêm sự thân thiện cho SE.
- Custom Structure: định dạng này là sự tổng hợp các định dạng trên và mở rộng thêm các tùy biến khác mà người dùng tự định nghĩa cho riêng mình. Nếu bạn có tìm hiểu về WordPress và SEO. Tôi nghĩ rằng bạn sẽ chọn nó không cần suy nghĩ.
Phụ mục: một số biến sử dụng cho cấu trúc Custom Structure
Nếu bạn chọn sử dụng cấu trúc Permalink loại custom thì bạn nên tìm hiểu thêm 1 tí về các biến hỗ trợ cho loại này. Bạn có thể tìm hiểu nó qua danh sách này hoặc tôi sẽ liệt kê ở dưới.
%year%
Năm bài được đăng, sẽ ra định dạng số. Ví dụ : 2011.
%monthnum%
Tháng bài viết được đăng. Ví dụ: 03
%day%
Ngày đăng bài. Ví dụ 18.
%hour%
Giờ đăng bài.
%minute%
Phút đăng bài.
%second%
Giây đăng bài.
%post_id%
Một số ID được hệ thống tạo ra nhằm giúp quá trình truy vấn dữ liệu được dễ dàng và chính xác.
%postname%
Nếu bạn sử dụng biến này, hệ thống sẽ tự động tối ưu hóa URL bằng cách gán thêm tiêu đề bài viết trên URL. Nếu sử dụng nó trên tiêu đề bạn nên sử dụng thêm plugin Vietnamese Permalink để chuẩn hóa tiếng Việt về dạng thích hợp cho URL trước. Plugin này bạn có thể download ở đây.
%category%
Giống như trên nhưng thay vì tiêu đề bài viết sẽ là danh mục bài.
%tag%
Định dạng tối ưu hóa cho URL của thẻ (tag).
%author%
Cho phép đưa tác giả bài viết lên URL. Tuy nhiên mình không khuyến khích sử dụng cái này vì nó sẽ làm ảnh hưởng nhiều đến việc truy vấn dữ liệu.
Cách làm việc của WordPress Permalink
Với nhiêu đó việc mình nghĩ bạn cũng có thể hiểu nhiều về Permalink rồi. Tiếp theo tôi sẽ nói về cách hoạt động của Permalink để bạn hiểu cặn kẽ hơn về cách WordPress sử dụng Permalink để lấy dữ liệu trên website của mình. Bạn nào quan tâm đến kĩ thuật có thể đọc phần này. Bạn nào không quan tâm cũng nên đọc cho biết hoặc không đọc cũng chả ảnh hưởng gì đến hòa bình thế giới cả :)
Bình thường, khi bạn biên tập và gọi một URL để đọc một bài viết hoặc một category, chúng ta sẽ có một URL đã được rewrite như sau (ở đây tôi bỏ qua cấu trúc mặc định):
http://nhanweb.com/2011/03/wordpress-permalink-nao-tot-nhat-cho-seo.html
Lúc này sau khi được gọi, hệ thống WordPress sẽ chuyển URL đã được làm đẹp này về một định dạng mà WordPress có thể hiểu và xử lý dễ dàng.
http://nhanweb.com?year=2011&month=03&name=wordpress-permalink-nao-tot-nhat-cho-seo
Các biến được gửi kèm theo URL trên sẽ được nhận và được đưa vào hệ thống nhận diện biến của WordPress và được làm sạch “rác” xung quanh nó, tránh các lỗi SQL Injection… Sau đó, một query_posts sẽ được gọi để xử lý các tham số đầu vào.
Việc xử lý này được thực hiện bởi hàm wp() được gọi trong file wp-blog-header.php.
Kết quả trả về sẽ được lưu trong biến $wp_query. Đây là một biến toàn cục (global) và được sử dụng trong tất cả các hàm loop của các theme WordPress. Việc cuối cùng là theme sẽ sử dụng các hàm tương ứng để hiển thị dữ liệu.
Nên sử dụng định dạng Permalink nào tốt cho SEO
Phần này tôi sẽ giành để giải thích về cách xử lý biến và lấy dữ liệu tương ứng với các biến truyền theo URL. Dựa trên kết quả này bạn sẽ thấy Permalink nào sẽ giúp hệ thống lấy dữ liệu dễ dàng hơn, ít ngốn tài nguyên hơn(ta biết rằng MySQL là một trong những “chuyên gia” trong việc ngốn tài nguyên hệ thống máy chủ). Kết hợp với kiến thức SEO của mình, bạn sẽ chọn được permalink ưng ý nhất. Việc chọn lựa tôi để giành cho các bạn nhé.
1. Dạng Permalink Default (mặc định):
Dạng này được cái là sử dụng ID của post hoặc page để lấy dữ liệu nên việc truy vấn CSDL theo tôi là nhanh nhất vì CSDL đã được thiết kế tối ưu cho việc sử dụng ID làm khóa chính trong truy vấn. Đây cũng là truy vấn ít ngốn tài nguyên nhất mặc dù việc tìm kiếm 1 ID giữa 1triệu record có thể làm cho bạn… hoảng :)
2. Dạng Permalink Day and name
Dạng này là sự kết hợp truy vấn giữa ngày đăng và tên bài viết. Hệ thống sẽ tìm kiếm những bài viết theo năm YYYY trước, sau đó tìm kiếm các bài viết theo tháng MM, tiếp theo là tìm bài được đăng trong ngày DD, cuối cùng là sẽ tìm có tên thích hợp với tên được sử dụng.
3. Dạng Permalink Month and name
Dạng này cũng gần giống với dạng Day and name đã nói ở trên tuy nhiên rút gọn bớt 1 bước tìm kiếm theo ngày để hạn chế bớt truy vấn không cần thiết khi số lượng bài đăng mỗi ngày không nhiều.
4. Dạng Permalink Numeric
Dạng này vấn sử dụng ID như khóa chính để lấy dữ liệu. Điều khác nhau so với dạng Default có lẽ là bởi vì nó được làm “đẹp” hơn để tối ưu cho SEO.
5. Custom Structure
Đây là dạng tùy biến của người dùng vì cho phép chúng ta chọn Permalink theo sở thích. Tôi thấy nhiều bạn thích chọn bài viết dạng http://nhanweb.com/ten-bai-viet.html để làm Permalink. Về bản chất truy vấn kiểu này cũng khá tốt vì khi thiết kế việc lưu trữ WordPress đã cố tình lưu riêng phần post_name đã được biên tập cho việc hiển thị trên URL như một khóa chính thứ hai sau ID. Tuy nhiên, việc truy vấn string dĩ nhiên là sẽ không nhanh bằng integer(dạng số) và do không được thiết kế để làm khóa chính mặc định nên truy vấn bằng post_name sẽ mang tính chất như một truy vấn string thông thường. Dĩ nhiên điều này làm hao tốn tài nguyên máy chủ hơn.
Kết luận
Mục đích tôi viết bài này nhằm giúp các bạn hiểu rõ hơn, kĩ hơn về hệ thống Permalink của WordPress để kết hợp trong SEO. Có lẽ bạn sẽ cho rằng các truy vấn MySQL sẽ không ảnh hưởng gì đến tốc độ tải trang của bạn quá nhiều vì số lượng record bài viết sẽ không nhiều lắm, cùng lắm vài chục ngàn record cho blog là nhiều rồi. Điều đó hoàn toàn không đúng ! Một khi blog bạn phát triển, số lượng người đọc tăng đồng nghĩa với lượng truy vấn đến CSDL càng nhiều, hệ thống phải ngốn resource càng lớn và ngay cả khi các công cụ tìm kiếm(Search Engine) thu thập dữ liệu cũng sẽ gặp khó khăn khi tốc độ tải trang chậm hoặc overload resource…
Nếu bạn quan tâm đến việc phát triển website có chiều sâu bạn nên nghiên cứu và lựa chọn một Permalink cho mình ngay từ bây giờ để có thể phát triển dài lâu. Đừng để đến khi hệ thống gặp vấn đề rồi bạn mới thay đổi thì đã quá muộn vì số lượng innerlink, incomelink bị broken có lẽ sẽ khá nhiều.
minh says
bac nhan web co thesis 2.0 khong cho em xin 1 ban
Nguyễn Duy Nhân says
Có ! Nhưng không cho :) Còn để người ta làm ăn nữa chứ bác. Ai cũng xin thì họ có mà ..húp cháo.
Dang Lam says
Bác cứ chia sẻ đi. Vì đã ko mua thì mãi mãi họ ko mua đâu :). Có tiền thì đã mua ;))
mình đã thử dùng gần như là all cả các permalink. Bây h thì mình thích nhất “/%postname%/” với các blog mà mình viết :)
còn các blog mà lấy tin thì dùng kiểu như bác đang sài =))
Tech.Vixka.net says
Mình mà làm site công ty thì thích permalink dạng /category/name hơn. Nhưng mà blog thì cứ default cho nó yên tâm. =))
Trap He Sang says
hi. trước khi đọc bài này mình nghĩ sẽ đc chỉ dẫn nên sử dụng Permalink dạng post-name chứ. hóa ra quyền quyết định là tùy người đọc. sao bạn k cho lời khuyên đi. mình chọn dạng post-name. mình nghĩ cái này SEO tốt nhất, người đọc cũng đc lợi (chỉ cần nhìn URL là biết tên bài viết) :)
Nguyễn Duy Nhân says
Quyền quyết định vẫn để ở chỗ blogger mà bạn. Có điều làm thế nào để tối ưu hóa hệ thống tốt nhất lại là câu chuyện khác. Mình không có lời khuyên nào cho các bạn cả bởi vì tùy theo mục đích mà sử dụng thôi. Nếu có hình thức tốt nhất mình nghĩ là chắc chắn WordPress không cần phải chia ra nhiều dạng Permalink như vậy đâu => mỗi cái đều có cái hay, cái lợi riêng của nó.
Quyết định là ở bạn.
minh nguyen hoang says
em dùng cái theme childtheme cho thesis không hỗ trợ slidebar và hiển thị footer. dùng code gì để cho hiện thị khi kéo wiget vào slidebar và footer ?
Nguyễn Duy Nhân says
Bạn đăng ký một widget cho plugin nếu nó không hỗ trợ là được mà. Chi tiết bạn có thể xem thêm document hoặc phần support của thesis.
Blog Cơ Khí says
Mình đang để dạng %postname%, giờ nếu đổi sang dạng /%year%/%monthnum%/%postname% rồi dùng chức năng Reset Permalinks (hình như cũng là một plugin do bác viết) thì có ảnh hưởng gì đến những link đã được google index trước kia không bác?
Nguyễn Duy Nhân says
Có ảnh hưởng.
microsofttech says
Cho mình hỏi, đối với wordpress thì dạng Permalink nào là tốt nhất. Permalink một số web mình thấy có site thì để dấu / cuối, có site thì ko. Có sự khác biệt nào ở đây không ta?!
hosting viet nam says
thanks mình mới làm quen với wordpress nên rất cần những bài bổ ích như thế này L-)
Phụng says
Cấu trúc dạng Bác Nhân vậy là ok rồi, nhưng ngặt nỗi không thêm “/” ở cuối categories được.
Blog/web công ty nếu chỉ viết dưới 100 bài thì bỏ “năm/ tháng” cũng được, nhìn cho đẹp, nhưng sau này muốn phát triển thì làm thêm web mới đặt ở thư mục hoặc dạng sub domain hoặc redirect 301 các link củ về link mới là được.
tibi886 says
e thì đang dùng kiểu /%post_name %, kinh nghiệm làm, đôi khi cần sống lại những bài viết ngày xửa ngày xưa thì cũng ko hỏng luôn cái link được google ưu ái bác ah ;)) ;))
Tran Nhat Thanh says
Chào Nhân, cám ơn về bài viết của bạn !
Mình muốn hỏi thêm 1 số vấn đề , trước đây mình sử dụng permalink kiểu %post_name% , nhưng thời gian gần đây mình nghĩ rằng khi bài viết của mình quá nhiều sẽ xảy ra sự trùng lặp khi đặt tiêu đề ,*(hiện nay web của mình đều viết 2 bài mới)
nên nghĩ là nên đặt theo kiểu /month/year/post_name ….cho mình hỏi nếu mình chuyển qua kiểu này thì có gây ra ảnh hưởng gì với cái bài viết trước đó, có ảnh hưởng đến quá trình SEO ko ?
P/s: hiện nay mình đã chuyển qua dạng trên rồi, trong trường hợp mình chuyển về lại dạng ban đầu là %post_name% lại thì có gây ra xáo trộn gì nữa ko ?
Mong bạn trả lời !
Nguyễn Duy Nhân says
Tương tự như bạn chuyển lần đầu thôi. Nhìn chung là có ảnh hưởng nhưng không lớn lắm.
Ngoài ra bạn không cần phải lo lắng về việc bị trùng permalink vì WordPress sẽ tự động thêm 1 số vào phía sau nếu bị trùng.
Nguyễn Tiến Hòa says
Dear Mr Nhân,
e là học viên trong lớp học wordpress của Anh, trước tiên e rất cám ơn a và các anh chị đã dạy e, e đang chờ ngày họp lại 1 lần về những thắc mắc mà lâu quá!
e có thể mời a ly cafe dc chứ ah?
làm sao e liên lạc được với anh?
sdt cua e: 01667 625 303
Nguyễn Duy Nhân says
Chào Hòa,
Do chưa sắp xếp được thời gian phù hợp và do thiếu nhân sự tổ chức nên anh chưa tổ chức được. Sẽ sắp xếp vào khoản đầu hoặc giữa tháng sau em nhé.
Nguyễn Tiến Hòa says
a nhắn cho e số điện thoại của anh qua số này được không ah?
01667 625 303
Nguyễn Tiến Hòa says
Dear Mr Nhân,
website của e được người khác làm, là web bán hàng, trước mỗi khi e up sản phảm mới lên thì sản phẩm đó nằm ở ngay trang nhất, giờ mở lên nó chỉ có mỗi tiêu đề tin tức, a giúp em xem lỗi là ở chỗ nào vậy?
anh vào trang này coi giùm e với: http://www.sieuthihangthethao.com
Nguyễn Tiến Hòa says
mr Nhan, where’re you?