Cách Google diễn giải quy cách của tệp robots.txt

Trình thu thập dữ liệu tự động của Google hỗ trợ Giao thức loại trừ cho robot (REP). Điều này có nghĩa là trước khi thu thập dữ liệu một trang web, trình thu thập dữ liệu của Google sẽ tải xuống và phân tích cú pháp tệp robots.txt của trang web đó để trích xuất thông tin về những phần có thể thu thập dữ liệu trên trang web. Giao thức loại trừ cho robot không áp dụng cho các trình thu thập dữ liệu của Google do người dùng kiểm soát (ví dụ: thuê bao nguồn cấp dữ liệu) hoặc các trình thu thập dữ liệu được dùng để tăng cường mức độ an toàn cho người dùng (ví dụ: phân tích phần mềm độc hại).

Tệp robots.txt là gì?

Nếu không muốn trình thu thập dữ liệu truy cập vào các phần trên trang web của mình, bạn có thể tạo một tệp robots.txt có các quy tắc phù hợp. Tệp robots.txt là một tệp văn bản đơn giản chứa các quy tắc về việc trình thu thập dữ liệu nào có thể truy cập vào những phần nào của trang web.

Vị trí của tệp và phạm vi hiệu lực

Bạn phải đặt tệp robots.txt trong thư mục cấp cao nhất của một trang web và qua một giao thức được hỗ trợ. Đối với Google Tìm kiếm, giao thức được hỗ trợ là HTTP, HTTPS và FTP. Trên HTTP và HTTPS, các trình thu thập dữ liệu tìm nạp tệp robots.txt thông qua yêu cầu GET không có điều kiện HTTP; trên FTP, các trình thu thập dữ liệu dùng lệnh RETR (RETRIEVE) chuẩn bằng thông tin đăng nhập ẩn danh.

Các quy tắc liệt kê trong tệp robots.txt chỉ áp dụng cho máy chủ, giao thức và số cổng nơi lưu trữ tệp robots.txt.

Ví dụ về URL robots.txt có hiệu lực

Ví dụ về URL robots.txt
http://example.com/robots.txt Có hiệu lực với:
  • http://example.com/
  • http://example.com/folder/file
Không có hiệu lực với:
  • http://other.example.com/
  • https://example.com/
  • http://example.com:8181/
http://www.example.com/robots.txt

Có hiệu lực với: http://www.example.com/

Không có hiệu lực với:

  • http://example.com/
  • http://shop.www.example.com/
  • http://www.shop.example.com/
http://example.com/folder/robots.txt Không phải là tệp robots.txt có hiệu lực. Trình thu thập dữ liệu không kiểm tra các tệp robots.txt trong thư mục con.
http://www.exämple.com/robots.txt Có hiệu lực với:
  • http://www.exämple.com/
  • http://xn--exmple-cua.com/

Không có hiệu lực với: http://www.example.com/

ftp://example.com/robots.txt

Có hiệu lực với: ftp://example.com/

Không có hiệu lực với: http://example.com/

http://212.96.82.21/robots.txt

Có hiệu lực với: http://212.96.82.21/

Không có hiệu lực với: http://example.com/ (ngay cả khi được lưu trữ trên 212.96.82.21)

http://example.com:80/robots.txt

Có hiệu lực với:

  • http://example.com:80/
  • http://example.com/

Không có hiệu lực với: http://example.com:81/

http://example.com:8181/robots.txt

Có hiệu lực với: http://example.com:8181/

Không có hiệu lực với: http://example.com/

Xử lý lỗi và mã trạng thái HTTP

Khi yêu cầu một tệp robots.txt, mã trạng thái HTTP trong phản hồi của máy chủ sẽ ảnh hưởng đến cách trình thu thập dữ liệu của Google sử dụng tệp robots.txt.

Xử lý lỗi và mã trạng thái HTTP
2xx (thành công) Mã trạng thái HTTP báo hiệu thành công để nhắc trình thu thập dữ liệu của Google xử lý tệp robots.txt theo thông tin mà máy chủ cung cấp.
3xx (chuyển hướng)

Google đi theo ít nhất 5 bước chuyển hướng như đã xác định trong RFC 1945, sau đó dừng lại và coi đó là một lỗi 404 đối với tệp robots.txt. Quy tắc này cũng áp dụng cho mọi URL không được phép trong chuỗi chuyển hướng, vì lệnh chuyển hướng khiến trình thu thập dữ liệu không thể tìm nạp các quy tắc.

Google không đi theo các lệnh chuyển hướng logic trong các tệp robots.txt (chuyển hướng loại khung, JavaScript hoặc meta refresh).

4xx (lỗi ứng dụng)

Trình thu thập dữ liệu của Google xử lý mọi lỗi 4xx như thể tệp robots.txt có hiệu lực không tồn tại, tức là thu thập dữ liệu mà không có quy tắc hạn chế.

5xx (lỗi máy chủ)

Vì máy chủ không thể cung cấp phản hồi chắc chắn cho yêu cầu cung cấp tệp robots.txt của Google, nên Google tạm thời diễn giải lỗi máy chủ như thể trang web hoàn toàn không cho phép thu thập dữ liệu. Google sẽ cố gắng thu thập dữ liệu của tệp robots.txt này cho đến khi nhận được mã trạng thái HTTP không phải lỗi máy chủ. Lỗi 503 (service unavailable) dẫn đến việc thử lại yêu cầu khá thường xuyên. Nếu không thể truy cập vào tệp robots.txt trong hơn 30 ngày, Google sẽ sử dụng bản sao gần nhất của tệp robots.txt này trong bộ nhớ đệm. Trong trường hợp không có bản sao, Google sẽ xem như là không có hạn chế đối với việc thu thập dữ liệu.

Nếu có thể xác định rằng một trang web được định cấu hình không chính xác dẫn đến việc trả về mã trạng thái 5xx thay vì 404 cho các trang bị thiếu, chúng tôi sẽ xem lỗi 5xx của trang web đó là 404. Ví dụ: nếu thông báo lỗi trên trang trả về mã trạng thái 5xx là "Không tìm thấy trang", chúng tôi sẽ diễn giải mã trạng thái đó là lỗi 404 (not found).

Những lỗi khác Google coi một tệp robots.txt không thể tìm nạp do các sự cố liên quan đến DNS hoặc kết nối mạng (như hết thời gian chờ, phản hồi không hợp lệ, kết nối bị đặt lại/bị gián đoạn, lỗi khi nhóm dữ liệu HTTP) là lỗi máy chủ.

Lưu vào bộ nhớ đệm

Google thường lưu nội dung của tệp robots.txt vào bộ nhớ đệm trong tối đa 24 giờ. Tuy nhiên, thời gian này có thể dài hơn trong những trường hợp không thể làm mới phiên bản lưu vào bộ nhớ đệm (chẳng hạn như do hết thời gian chờ hoặc lỗi 5xx). Các trình thu thập dữ liệu khác nhau có thể sử dụng chung một phản hồi đã lưu vào bộ nhớ đệm. Google có thể tăng hoặc giảm thời gian lưu vào bộ nhớ đệm dựa trên các tiêu đề HTTP max-age Cache-Control.

Định dạng tệp

Tệp robots.txt phải là tệp văn bản thuần tuý được mã hóa UTF-8, đồng thời các dòng phải được phân tách bằng CR, CR/LF hoặc LF.

Google bỏ qua các dòng không hợp lệ trong tệp robots.txt, trong đó có Dấu thứ tự byte (BOM) Unicode ở đầu tệp robots.txt, và chỉ sử dụng các dòng hợp lệ. Ví dụ: nếu nội dung tải xuống là HTML thay vì quy tắc trong tệp robots.txt, Google sẽ cố gắng phân tích cú pháp của nội dung, trích xuất quy tắc và bỏ qua mọi nội dung khác.

Tương tự, nếu chế độ mã hóa ký tự của tệp robots.txt không phải là UTF-8, thì Google có thể bỏ qua các ký tự không thuộc phạm vi của UTF-8 vì các quy tắc robots.txt có thể hiển thị không hợp lệ.

Hiện tại, Google áp dụng giới hạn kích thước tệp robots.txt là 500 kibibyte (KiB). Phần nội dung thừa ra khỏi kích thước tệp tối đa sẽ bị bỏ qua. Bạn có thể giảm kích thước của tệp robots.txt bằng cách hợp nhất các lệnh sẽ làm cho tệp bị quá kích thước. Ví dụ: đặt nội dung bị loại trừ trong một thư mục riêng.

Cú pháp

Các dòng hợp lệ trong tệp robots.txt phải bao gồm một trường, một dấu hai chấm và một giá trị. Dấu cách là không bắt buộc (nhưng nên dùng để cải thiện tính dễ đọc). Hệ thống sẽ bỏ qua khoảng trắng ở đầu và cuối dòng. Để đưa các nhận xét vào tệp, hãy thêm ký tự # vào trước nhận xét của bạn. Xin lưu ý rằng mọi ký tự sau ký tự # sẽ bị bỏ qua. Định dạng chung là <field>:<value><#optional-comment>.

Google hỗ trợ những trường sau:

  • user-agent: xác định trình thu thập dữ liệu thuộc phạm vi áp dụng của quy tắc này.
  • allow: một đường dẫn URL được phép thu thập dữ liệu.
  • disallow: một đường dẫn URL không được phép thu thập dữ liệu.
  • sitemap: URL đầy đủ của một sơ đồ trang web.

Các trường allowdisallow còn được gọi là lệnh. Những lệnh này luôn được xác định dưới dạng directive: [path], trong đó [path] là không bắt buộc. Theo mặc định, các trình thu thập dữ liệu được chỉ định sẽ không phải tuân theo quy tắc hạn chế nào khi thu thập dữ liệu. Trình thu thập dữ liệu sẽ bỏ qua các lệnh không có [path].

Giá trị [path], nếu được chỉ định, phải nằm ở vị trí tương đối so với thư mục gốc của trang web mà từ đó tệp robots.txt được tìm nạp (sử dụng cùng một giao thức, số cổng, tên máy chủ và tên miền). Giá trị đường dẫn phải bắt đầu bằng / để chỉ định thư mục gốc, đồng thời giá trị này có phân biệt chữ hoa chữ thường. Tìm hiểu thêm về cách tìm URL phù hợp dựa trên giá trị đường dẫn.

user-agent

Dòng user-agent xác định trình thu thập dữ liệu thuộc phạm vi áp dụng của quy tắc này. Hãy xem bài viết trợ giúp về Trình thu thập dữ liệu và chuỗi tác nhân người dùng của Google để nắm được danh sách đầy đủ các chuỗi tác nhân người dùng mà bạn có thể dùng trong tệp robots.txt.

Giá trị của dòng user-agent không phân biệt chữ hoa chữ thường.

disallow

Lệnh disallow chỉ định các đường dẫn mà các trình thu thập dữ liệu (như đã xác định tại dòng tác nhân người dùng mà lệnh disallow được nhóm cùng) không được thu thập dữ liệu. Trình thu thập dữ liệu bỏ qua lệnh không có đường dẫn.

Giá trị của lệnh disallow có phân biệt chữ hoa chữ thường.

Cách sử dụng:

disallow: [path]

allow

Lệnh allow chỉ định các đường dẫn mà các trình thu thập dữ liệu đã chỉ định có thể thu thập dữ liệu. Khi không có đường dẫn nào được chỉ định, lệnh này sẽ bị bỏ qua.

Giá trị của lệnh allow có phân biệt chữ hoa chữ thường.

Cách sử dụng:

allow: [path]

sitemap

Google, Bing, Yahoo và các công cụ tìm kiếm phổ biến khác hỗ trợ trường sitemap trong tệp robots.txt, theo định nghĩa trên sitemaps.org.

Giá trị của trường sitemap có phân biệt chữ hoa chữ thường.

Cách sử dụng:

sitemap: [absoluteURL]

Dòng [absoluteURL] trỏ đến vị trí của sơ đồ trang web hoặc tệp chỉ mục sơ đồ trang web. Đó phải là một URL đủ điều kiện (bao gồm cả giao thức và máy chủ) và không cần phải mã hóa URL. URL không bắt buộc phải nằm trên cùng một máy chủ với tệp robots.txt. Bạn có thể chỉ định nhiều trường sitemap. Trường sơ đồ trang web không gắn với tác nhân người dùng cụ thể nào. Đồng thời, mọi trình thu thập dữ liệu đều có thể tuân theo những trường này, miễn là không bị từ chối.

Ví dụ:

user-agent: otherbot
disallow: /kale

sitemap: https://example.com/sitemap.xml
sitemap: https://cdn.example.org/other-sitemap.xml
sitemap: https://ja.example.org/テスト-サイトマップ.xml

Nhóm các dòng và quy tắc

Bạn có thể nhóm các quy tắc áp dụng cho nhiều tác nhân người dùng bằng cách lặp lại dòng user-agent cho từng trình thu thập dữ liệu.

Ví dụ:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

user-agent: e
user-agent: f
disallow: /g

user-agent: h

Trong ví dụ này, có bốn nhóm quy tắc riêng biệt:

  • Một nhóm cho tác nhân người dùng "a".
  • Một nhóm cho tác nhân người dùng "b".
  • Một nhóm cho cả tác nhân người dùng "e" và "f".
  • Một nhóm cho tác nhân người dùng "h".

Đối với nội dung mô tả kỹ thuật của một nhóm, hãy xem phần 2.1 của nội dung Giao thức loại trừ cho robot.

Thứ tự ưu tiên đối với tác nhân người dùng

Chỉ có một nhóm hợp lệ duy nhất đối với mỗi trình thu thập dữ liệu cụ thể. Trình thu thập dữ liệu của Google xác định đúng nhóm quy tắc bằng cách tìm trong tệp robots.txt nhóm có tác nhân người dùng cụ thể nhất phù hợp với tác nhân người dùng của trình thu thập dữ liệu của Google. Các nhóm khác sẽ bị bỏ qua. Tất cả văn bản không khớp đều bị bỏ qua (ví dụ: cả googlebot/1.2googlebot* đều tương đương với googlebot). Thứ tự của các nhóm trong tệp robots.txt là không quan trọng.

Nếu bạn khai báo nhiều nhóm cụ thể cho một tác nhân người dùng, thì tất cả quy tắc trong các nhóm áp dụng cho tác nhân người dùng đó sẽ được kết hợp nội bộ thành một nhóm duy nhất. Nhóm theo tác nhân người dùng cụ thể và nhóm chung (*) không kết hợp với nhau.

Ví dụ

Khớp với trường user-agent

user-agent: googlebot-news
(group 1)

user-agent: *
(group 2)

user-agent: googlebot
(group 3)

Sau đây là cách các trình thu thập dữ liệu sẽ chọn nhóm thích hợp:

Nhóm mà mỗi trình thu thập dữ liệu tuân theo
Googlebot News googlebot-news tuân theo nhóm 1, vì nhóm 1 là nhóm cụ thể nhất.
Googlebot (web) googlebot tuân theo nhóm 3.
Googlebot Images googlebot-images tuân theo nhóm 2, vì không có nhóm googlebot-images cụ thể.
Googlebot News (khi thu thập dữ liệu hình ảnh) Khi thu thập dữ liệu hình ảnh, googlebot-news tuân theo nhóm 1. googlebot-news chỉ tuân theo nhóm 1 do không thu thập dữ liệu hình ảnh cho Google Hình ảnh.
Otherbot (web) Các trình thu thập dữ liệu khác của Google tuân theo nhóm 2.
Otherbot (tin tức) Các trình thu thập dữ liệu khác của Google có chức năng thu thập dữ liệu đối với nội dung tin tức, nhưng không được xác định là googlebot-news tuân theo nhóm 2. Ngay cả khi có một mục cho trình thu thập dữ liệu liên quan, mục đó chỉ có hiệu lực nếu phù hợp.

Nhóm quy tắc

Nếu có nhiều nhóm trong một tệp robots.txt có liên quan đến một tác nhân người dùng cụ thể, thì các trình thu thập dữ liệu của Google sẽ hợp nhất các nhóm đó trong nội bộ. Ví dụ:

user-agent: googlebot-news
disallow: /fish

user-agent: *
disallow: /carrots

user-agent: googlebot-news
disallow: /shrimp

Trình thu thập dữ liệu nhóm các quy tắc lại với nhau trong nội bộ dựa trên tác nhân người dùng, ví dụ:

user-agent: googlebot-news
disallow: /fish
disallow: /shrimp

user-agent: *
disallow: /carrots

Trình phân tích cú pháp robots.txt bỏ qua các quy tắc khác ngoài allow, disallowuser-agent. Như vậy tức là đoạn mã sau đây trong tệp robots.txt được coi là một nhóm, và do đó quy tắc disallow: / tác động đến cả user-agent ab:

user-agent: a
sitemap: https://example.com/sitemap.xml

user-agent: b
disallow: /

Khi xử lý các quy tắc trong tệp robots.txt, trình thu thập dữ liệu sẽ bỏ qua dòng sitemap. Ví dụ: các trình thu thập dữ liệu hiểu đoạn mã trước đó trong tệp robots.txt như sau:

user-agent: a
user-agent: b
disallow: /

Tìm URL phù hợp dựa trên giá trị đường dẫn

Google sử dụng giá trị đường dẫn trong các lệnh allowdisallow làm cơ sở để xác định liệu một quy tắc có áp dụng cho một URL cụ thể trên một trang web hay không. Quy trình này hoạt động bằng cách so sánh quy tắc đó với thành phần đường dẫn của URL mà trình thu thập dữ liệu đang cố gắng tìm nạp. Các ký tự ASCII không phải 7 bit trong một đường dẫn có thể được sử dụng trong đường dẫn dưới dạng ký tự UTF-8 hoặc ký tự UFT-8 mã hóa bằng ký tự thoát dạng phần trăm theo RFC 3986.

Google, Bing và các công cụ tìm kiếm phổ biến khác hỗ trợ một dạng ký tự đại diện giới hạn cho các giá trị đường dẫn. Đó là:

  • * chỉ định 0 hoặc nhiều phiên bản khác của bất kỳ ký tự hợp lệ nào.
  • $ chỉ định điểm cuối của URL.
Ví dụ về đường dẫn khớp
/ Khớp với thư mục gốc và mọi URL cấp thấp hơn.
/* Tương đương với /. Ký tự đại diện đứng sau bị bỏ qua.
/$ Chỉ khớp với thư mục gốc. Mọi URL cấp thấp hơn đều được phép thu thập dữ liệu.
/fish

Khớp với mọi đường dẫn bắt đầu bằng /fish.

Khớp:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

Không khớp:

  • /Fish.asp
  • /catfish
  • /?id=fish
  • /desert/fish
/fish*

Tương đương với /fish. Ký tự đại diện đứng sau bị bỏ qua.

Khớp:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

Không khớp:

  • /Fish.asp
  • /catfish
  • /?id=fish
/fish/

Khớp với mọi mục trong thư mục /fish/.

Khớp:

  • /fish/
  • /animals/fish/
  • /fish/?id=anything
  • /fish/salmon.htm

Không khớp:

  • /fish
  • /fish.html
  • /Fish/Salmon.asp
/*.php

Khớp với mọi đường dẫn chứa .php.

Khớp:

  • /index.php
  • /filename.php
  • /folder/filename.php
  • /folder/filename.php?parameters
  • /folder/any.php.file.html
  • /filename.php/

Không khớp:

  • / (ngay cả khi liên kết đến /index.php)
  • /windows.PHP
/*.php$

Khớp với mọi đường dẫn kết thúc bằng .php.

Khớp:

  • /filename.php
  • /folder/filename.php

Không khớp:

  • /filename.php?parameters
  • /filename.php/
  • /filename.php5
  • /windows.PHP
/fish*.php

Khớp với mọi đường dẫn chứa /fish.php theo thứ tự này.

Khớp:

  • /fish.php
  • /fishheads/catfish.php?parameters

Không khớp: /Fish.PHP

Thứ tự ưu tiên đối với quy tắc

Khi khớp quy tắc trong tệp robots.txt với URL, các trình thu thập dữ liệu sử dụng quy tắc cụ thể nhất dựa trên độ dài của đường dẫn. Trong trường hợp các quy tắc mâu thuẫn với nhau (bao gồm cả các quy tắc có ký tự đại diện), Google sẽ sử dụng quy tắc có mức hạn chế thấp nhất.

Ví dụ sau đây minh họa quy tắc mà trình thu thập dữ liệu của Google sẽ áp dụng cho một URL cụ thể.

Trường hợp ví dụ
http://example.com/page

allow: /p
disallow: /

Quy tắc áp dụng: allow: /p vì quy tắc này cụ thể hơn.

http://example.com/folder/page

allow: /folder
disallow: /folder

Quy tắc áp dụng: allow: /folder vì trong trường hợp có nhiều quy tắc phù hợp, Google sẽ dùng quy tắc có mức độ hạn chế thấp nhất.

http://example.com/page.htm

allow: /page
disallow: /*.htm

Quy tắc áp dụng: disallow: /*.htm vì khớp với nhiều ký tự hơn trong URL nên quy tắc này cụ thể hơn.

http://example.com/page.php5

allow: /page
disallow: /*.ph

Quy tắc áp dụng: allow: /page vì trong trường hợp có nhiều quy tắc phù hợp, Google sẽ dùng quy tắc có mức độ hạn chế thấp nhất.

http://example.com/

allow: /$
disallow: /

Quy tắc áp dụng: allow: /$ vì quy tắc này cụ thể hơn.

http://example.com/page.htm

allow: /$
disallow: /

Quy tắc áp dụng: disallow: / vì quy tắc allow chỉ áp dụng cho URL gốc.