Thứ Ba, 19 tháng 4, 2016

Hướng dẫn SEO: Bắt đầu với .htaccess

 Là một SEO, chắc chắn bạn đã từng bị lạc vào một cấu hình Apache hoặc tập tin .htaccess. Chúng tôi thường xuyên đưa ra khuyến cáo cho các khách hàng dựa trên nội dung trùng lặp và chuyển hướng nhưng việc thực hiện có vẻ đáng sợ và phức tạp. Bài viết này sẽ làm cho bạn tự tin hơn khi nói chuyện với khách hàng hoặc nhà phát triển của bạn hoặc nhìn vào các cấu hình Apache của họ. Bạn sẽ có nhiều cái để nhìn vào, những chuyển hướng khác nhau và cảm nhận của bạn khi thực hiện.

slide ​


Khi bạn mở một tập tin .htaccess hay tập tin httpd.conf, có rất nhiều lựa chọn khác nhau trong đó. Chúng ta chỉ cần tập trung vào dòng chứa từ Rewrite: RewriteRule, RewriteBase.

Start the Engine

Đầu tiên, bạn mở tập tin và tìm dòng sau:

RewriteEngine On

Đơn giản chỉ cần đặt, tất cả các dòng này là rewrite engine. Nếu chúng ta để là RewriteEngine Off, rewrite sẽ mất hiệu lực. Thay vì vô tình chặn toàn bộ trang web của bạn trong tập tin robots.txt của bạn, RewriteEngine được thiết lập để đóng, hoặc bởi vì dòng này là mất tích hoàn toàn, vì vậy nó được sử dụng để tiến hành một kiểm tra nhanh chóng.

Các chi tiết khác mà bạn nên chú ý về dòng này là chúng ta chỉ có một khoảng cách duy nhất giữa 2 từ. Chúng ta không cần phải sử dụng các ký tự đặc biệt, dấu hoặc hoặc dấu ngoặc đơn. Bạn sẽ không nhìn thấy bất cứ điều gì như RewriteEngine=On hoặc RewriteEngine(“On”) như bạn có thể mong đợi ở một số ngôn ngữ lập trình. Ký tự khoảng trắng duy nhất là đủ để cho Apache mà chúng ta muốn chỉ thị RewriteEngine đến giá trị On.

Thiết lập cơ bản

Tiếp theo là RewriteBase. Giả sử trang web của chúng tôi là thegioiseo.com chúng tôi đang chạy trên Apache và chúng tôi có các dòng sau trong tập tin cấu hình của chúng tôi:

RewriteEngine On

RewriteBase /

RewriteRule page1.html page2.html


Một lần nữa, đó chỉ là một khoảng cách duy nhất giữa RewriteBase và /; nó làm việc theo cách như trước đây. RewriteBase là các chỉ thị và / là giá trị chúng tôi đang thiết lập. Những gì chúng tôi đang muốn nói ở đây là "giải thích các quy tắc sau đây là tương quan với căn cứ này". / là thư mục gốc vì vậy những gì chúng tôi có ở trên là tương đương với:

Original URL: http://thegioiseo.com/page1.html

Rewritten URL: http://thegioiseo.com/page2.html

Chúng tôi thiết lập dựa vào thư mục gốc và sau đó follow các dòng mà chúng tôi đã bắt đầu đề cập đến tên trang (page1.html and page2.html). Chúng hiểu như là thư mục gốc. Hãy thay đổi ví dụ:

RewriteBase /some-folder/

RewriteRule page1.html page2.html


Lưu ý chúng tôi không cần phải thay đổi bất cứ điều gì ở dòng thứ hai nhưng bây giờ nó là `/some-folder/`. Bây giờ quy tắc của chúng tôi có hiệu lực thực thi như sau:

Original URL: http://thegioiseo.com/page1.html

Rewritten URL: http://thegioiseo.com/page2.html

Đừng lo lắng về các quy tắc của nó, đó chỉ là tác động của sự thay đổi `RewriteBase`. Từ những gì chúng tôi biết cho đến nay, chúng tôi có thể bắt đầu xây dựng một tập tin .htaccess hay httpd.conf chỉ với hai dòng sau đây:

RewriteEngine On

RewriteBase /


Bắt đầu với các quy tắc

Vì vậy, các quy tắc rewrite đang có hiệu lực và một URL là tương đối so với thư mục gốc. Bây giờ là thời gian để viết các quy tắc/. Hãy bắt đầu với những gì chúng tôi đã nhìn thấy:

RewriteRule page1.html page2.html

Định dạng của dòng này là khá đơn giản: đó là tên của chỉ thị (RewriteRule), URL, chúng tôi muốn viết lại (page1.html) và cuối cùng là những gì chúng tôi muốn viết lại nó thành (page2.html). Một lần nữa, những lập luận được tách bằng dấu cách.

Một điều chúng ta cần phải nhận thức được là chúng tôi chưa chuyển hướng bất cứ điều gì: chúng tôi chỉ việc viết lại các URL. Theo như người dùng (hoặc Google)là có liên quan, họ đã yêu cầu page1.html, và họ đã nhận một cái gì đó trở lại. Không có sự chuyển hướng; không có dấu hiệu cho thấy bất cứ điều gì sai trái với yêu cầu của họ, hoặc bất cứ điều gì mà họ đã chuyển. Cụ thể, chúng tôi đã cho họ mọi thứ trên trang page2.html. Sự tương quan là là như thế này:

Google: Show me all the content on page1.html

Server: Sure, here you go. (provides the content of page2.html)

Bây giờ có lẽ đây là những gì bạn muốn nhưng SEO chỉ cần quan tâm đến RewriteRules khi chúng tôi đang cố gắng để giảm thiểu nội dung trùng lặp. Chúng tôi cần phải thực hiện một sửa đổi với RewriteRule của chúng tôi. Hãy tạo một chuyển hướng 301 bằng cách thêm vào nhiều hơn 1 tham số:

RewriteEngine On

RewriteBase /

RewriteRule page1.html page2.html [R=301]


Tất nhiên với một chuyển hướng 302 sẽ là giống nhau nhưng đối với tham số cuối cùng sẽ là [R = 302]. Nếu Googlebot hỏi page1.html, nó sẽ trao đổi với máy chủ như sau:

Google: Show me the content on page1.html

Server: Nope, it has ‘permanently moved’ — you want page2. Ask me for that.

Google: Show me page2 then.

Server: OK, here you go.

Nếu khách hàng đang sử dụng Apache, chúng tôi đã có một ý tưởng về những điều cơ bản mà chúng ta có thể kiểm tra:

- RewriteEngine On

- Giá trị của RewriteBase có giống với quy tắc rewrite?

- Việc chuyển hướng có được thực thi hay là chúng ta chỉ cần rewrite?

- Chuyển hướng 302 có cần phải được thay thế bằng chuyển hướng 301s?

Và bây giờ chúng tôi biết cách để thiết lập một chuyển hướng 301 giữa 2 trang trên trang web của chúng tôi. Chúng tôi cũng có thể thêm nhiều dòng RewriteRule:

RewriteEngine On

RewriteBase /

RewriteRule oldpage.php newpage.php [R=301]

RewriteRule page1.py page2.py [R=301]

RewriteRule page3.html page4.html [R=301]


Chúng tôi có thể dừng lại ở đó và chúng tôi muốn hiểu về chức năng cơ bản của Apache rewrites. Đây là URL được rewrite, đây là URL mà chúng tôi đang thay đổi nó, đây là một số tùy chọn đặc biệt để lưu ý (chẳng hạn như các loại chuyển hướng trong ví dụ của tôi).

Mở rộng quy mô với Regular Expressions

Nếu chúng ta có một trang web rất lớn thì đây là công việc rất tẻ nhạt. Chúng tôi đang bổ sung thêm một dòng mới cho mỗi rewrite. Nếu chúng ta cần phải chuyển hướng hàng nghìn trang, việc mở rộng không phải là một điều dễ dàng. Để thực hiện điều này, chúng tôi có thể sử dụng regular expressions. Đã có một hướng dẫn đầy đủ về regular expressions nên tôi sẽ không đi sâu vào nó. Đầu tiên, chúng ta hãy tưởng tượng chúng ta có 9999 trang mà chúng ta muốn chuyển hướng. Tất cả chúng đều bắt đầu bằng bằng từ old. Chúng tôi đã có old0001, old0002...old9999. Chúng tôi muốn giữ lại những con số và thay thể từ old bằng từ new.

Chúng ta cần phải làm gì?

- Chúng ta cần xác định tất cả các URL được bắt đầu với từ old.

- Chúng ta cần tìm cách để tiết kiệm số trang

- Chúng ta cần một cách để ám chỉ con số này một lần nữa khi chúng tôi đang làm việc với URL mới.

Để tìm một từ tại thời điểm bắt đầu URL tương đối, chúng tôi sử dụng ký tự đặc biệt ^:

RewriteRule ^old0001 new0001 [R=301]

Điều đó nói rằng: tất cả các URL bắt đầu bằng old0001 và gửi chuyển hướng 301 thành new0001. Vì vậy chúng tôi đã tiến hành một cải tiến có sẵn nhưng chúng tôi có thể đi xa hơn. Chúng tôi cần phải lưu các con số từ URL gốc và chúng tôi làm điều đó bằng cách đặt dấu ngoặc đơn xung quanh nó:

RewriteRule ^old(0001) new0001 [R=301]

Chúng tôi đã lưu lại các con số nhưng chúng tôi vẫn chưa thực sự sử dụng nó. Khi chúng tôi đặt dấu ngoặc xung quanh một phần của URL, Apache stores có chứa một biến đặc biệt, bạn có thể tham khảo một lần nữa bằng cách viết $1. Bây giờ chúng ta có thể viết như sau:

RewriteRule ^old(0001) new$1 [R=301]

Hãy dừng 1s để break nó xuống:

- Ký tự ^ nói rằng chúng ta đang bắt đầu nhìn vào URL

- Nếu URL bắt đầu bằng old0001, chúng tôi đã có một sự kết hợp

- Để lặp lại con số đó trong URL mới, chúng tôi chỉ có thể đặt $1 vào bất cứ nơi nào chúng tôi muốn.

Đây là điều tuyệt vời nhưng chúng tôi vẫn phải viết 1.000 dòng. Bước cuối cùng là để đến với một mô hình mà sẽ phù hợp với mọi con số. Có một mô hình đặc biệt để phù hợp với một ký tự duy nhất, đó là \d. Rõ ràng là nếu chúng ta chỉ cần gõ chữ d nó sẽ chỉ kết hợp với chữ d. Dấu gạch chéo để nói rằng đây là một ký tự đặc biệt. Vì vậy, chúng ta hãy xem xét lại nguyên tắc này một lần nữa:

RewriteRule ^old(\d\d\d\d) new$1 [R=301]

Điều đó sẽ đạt được mục tiêu của chúng tôi nhưng thay vì nhập \d 4 lần liên tiếp, chúng ta có thể sử dụng dấu ngoặc nhọn để xác định số lần cần nhập. Trong trường hợp này, các trang mà chúng tôi đang cần chính xác là 4 chữ số. Vì vậy, chúng tôi cần \d để được tìm thấy 4 lần trong 1 hàng. Dưới đây là cách chúng tôi làm điều đó:

RewriteRule ^old(\d{4}) new$1 [R=301]

Quy tắc này sẽ tìm thấy bất kỳ trang nào được bắt đầu với từ old theo sau là có 4 chữ số. Nó sẽ lưu số đó vào một biến đặc biệt. Sau đó, nó sẽ sử dụng một chuyển hướng 301 để gửi khách truy cập đến một trang mới. Trang mới là trên cùng một trang web, trong cùng một thư mục, và tất cả những gì thay đổi là từ old trong URL đã được hoán đổi thành từ new. 4 chữ số vẫn giữ nguyên:

Bây giờ hãy nhìn vào quy tắc sau:

RewriteEngine On

RewriteBase en-GB/

RewriteRule ^olddir/page-\d{2}-(.*) dir/$1 [R=302]


Bạn không thể hiểu tất cả mọi thứ, nhưng bạn không có đủ thông tin để nhìn thấy những gì đang diễn ra:

- Cả URL cũ và mới trong thư mục en-GB/

- en-GB/, chúng phù hợp với các URL trong thư mục olddir/

- Và tên trang bắt đầu với page-

- Tiếp theo là một \d

- Trên thực tế, nó là {2} con số

- Sau đó là một dấu gạch ngang khác -

- Và một số công cụ trong ngoặc `()`. Chúng ta vẫn chưa biết làm thế nào để giải thích `. *` nhưng đừng lo lắng về điều đó.

- Chuyển hướng đi vào một thư mục khác được gọi là dir

- Và bất cứ điều gì phù hợp trong ngoặc đơn trước đó được nối vào URL mới: $1

- Và có một chuyển hướng 302 đang diễn ra.

Nếu không có gì khác, tôi hy vọng rằng tôi đã thuyết phục được bạn về tính hiệu quả của regular expressions - hãy nhìn xem có bao nhiêu dòng tiếng Anh cần thiết để nói về điều tương tự. Dưới đây là một ví dụ về một quy tắc:

Original URL: http://thegioiseo.com/en-GB/olddir/page-20-services.html

Redirected URL: http://thegioiseo.com/en-GB/dir/services.html

Nếu chúng ta có rất nhiều URL xấu hoặc sai, chúng ta có thể bắt đầu sử dụng cùng một quy tắc để chuyển hướng chúng đến phiên bản được cải tiến. Ví dụ, bạn mắc sai lầm khi thực thi hreflang và bạn có một thư mục trên trang web của bạn được gọi là / en-UK /, nhắm mục tiêu vào khách hàng nói tiếng Anh ở nước Anh. Bạn nhận được liên kết đến tất cả các trang trong thư mục, và mọi thứ đang tiến triển tốt trước khi bạn nhận ra rằng en-UK không phải là một mã hreflang hợp lệ. Bạn sửa thẻ hreflang của bạn nhưng bây giờ bạn cũng muốn sửa chữa sai lầm trong URL cho rõ ràng. Hãy suy nghĩ một cách có hệ thống:

- Thư mục en-UK nằm trong thư mục site root, vì vậy RewriteBase phải là /

- Chúng tôi không muốn chuyển hướng trừ en-UK. Chúng tôi không muốn chuyển hướng một bài viết blog tại `/blog/why-en-UK-is-not-valid`. Vì vậy, ký tự đặc biệt ^ là cần thiết.

- Chúng tôi sẽ cần phải tiết kiệm phần còn lại của URL với (), để chúng tôi có thể tái sử dụng nó.

- Thư mục mới sẽ được gọi là en-GB và phần còn lại của URL phải được tái sử dụng ở đây là $1

- Chúng tôi muốn chuyển hướng 301.

Chúng tôi có thể bắt đầu với:

RewriteEngine On

RewriteBase /

RewriteRule ^en-UK/() en-GB/$1 [R=301]

Điều này đã hoàn thiện nhưng với một chi tiết: dấu ngoặc đơn là trống rỗng và đó là biến $1. Thách thức cuối cùng của chúng tôi là làm sao để nó phù hợp với tất cả mọi thứ khác trong URL. Điều này có nghĩa là:

- .= "phù hợp với mọi ký tự đơn"

- *="0 hoặc nhiều lần"

Và quy tắc cuối cùng của chúng tôi trông như thế này:

RewriteEngine On

RewriteBase /

RewriteRule ^en-UK/(.*) en-GB/$1 [R=301]

Những ký tự đặc biệt, chẳng hạn như. và * có thể được sử dụng độc lập. Bạn có thể bắt đầu kết hợp chúng với các tùy chọn khác mà bạn đã gặp phải:

.{2}: Phù hợp với mọi ký tự, chính xác 2 lần

\d*: Phù hợp với mọi con số, 0 hoặc nhiều lần

d*: Phù hợp với chữ 'd', 0 hoặc nhiều lần

\d{2}.*: Phù hợp với bất kỳ số có hai chữ số (\ d {2}), ngay lập tức sau 0 hoặc nhiều lần xuất hiện với bất kỳ kỳ tự (.*)

Bước tiếp theo

Nếu bạn muốn thực sự thoải mái với các biểu thức thông thường, sử dụng các khối mà chúng tôi đã tích lũy cho đến nay và xây dựng chúng dần trở thành một cái gì đó phức tạp hơn và vững chắc hơn.

Trang này là một tài liệu tham khảo tốt nhưng không cung cấp chi tiết. Nếu bạn đang tìm kiếm điều này, hãy thử những điều sau đây:

- RegexOne.com - là tuyệt vời ngay cả với những người mới bắt đầu. Nó là miễn phí và không cần phải đăng ký.

CodeSchool - bài học video và bài tập tương tác.

Codecademy - Một nguồn tài nguyên thực sự tốt, nhưng sẽ tốt hơn nếu bạn đã quen với Javascript.

Learn Regex the Hard Way - đây là một cuốn sách trực tuyến miễn phí mà bạn có thể tham khảo bất cứ khi nào.

Có một số công cụ kiểm tra regex trực tuyến - thường được viết bằng Javascript, vì vậy bạn có thể thấy ngay lập tức cho dù egular expression đang làm việc. Mặc dù có một phiền toái nhỏ đó là chúng thường yêu cầu bạn phải đặt một dấu \ trước mỗi dấu /. Tất nhiên, bạn không cần phải làm điều này trong .htaccess và nó có thể trở nên khó hiểu. Công cụ RegexPlanet không yêu cầu điều này. Dưới đây là một ví dụ mà tôi đã thử nghiệm en-UK:

Hãy nhìn vào cột “@array = $input =~ $regex”, bạn có thể xem tất cả các nhóm đã xuất hiện với dấu ngoặc đơn (trong trường hợp này chỉ là từ “something”). Khi bạn đã tìm thấy một mẫu biểu thức làm việc, bạn có thể sao chép và dán các biểu thức chính quy - không phải là “Perl regex object” — trực tiếp vào quy tắc rewrite của bạn.

Nguồn www.thegioiseo.com
Link: Hướng dẫn SEO: Bắt đầu với .htaccess

Không có nhận xét nào:

Đăng nhận xét