Bản đặc tả về tệp robots.txt

Bản tóm tắt

Tài liệu này nêu chi tiết cách Google xử lý tệp robots.txt, là một tệp cho phép bạn kiểm soát cách trình thu thập dữ liệu trang web của Google thu thập dữ liệu và lập chỉ mục các trang web có thể truy cập công khai.

Những nội dung thay đổi

Ngày 1 tháng 7 năm 2019, Google thông báo rằng giao thức robots.txt đang phấn đấu trở thành một tiêu chuẩn Internet. Tài liệu này sẽ đề cập đến những thay đổi đó.

Các định nghĩa cơ bản

Định nghĩa
Trình thu thập dữ liệu Trình thu thập dữ liệu là một dịch vụ hoặc tác nhân có chức năng thu thập dữ liệu trang web. Nói chung, trình thu thập dữ liệu sẽ tự động truy cập theo phương thức đệ quy vào các URL đã biết của một máy chủ lưu trữ hiển thị nội dung có thể truy cập bằng các trình duyệt web thông thường. Khi tìm thấy các URL mới (thông qua các phương thức khác nhau, chẳng hạn như thông qua các đường liên kết trên các trang hiện có đã thu thập dữ liệu hoặc thông qua các tệp Sơ đồ trang web), Google cũng thu thập dữ liệu các URL đó theo cách này.
Tác nhân người dùng Một phương tiện để xác định một trình thu thập dữ liệu hoặc nhóm trình thu thập dữ liệu cụ thể.
Lệnh Danh sách các nguyên tắc đặt ra trong tệp robots.txt, áp dụng cho một trình thu thập dữ liệu hoặc nhóm trình thu thập dữ liệu.
URL Bộ định vị tài nguyên thống nhất (Uniform Resource Locators) theo định nghĩa trong RFC 1738.
Riêng trên Google Các yếu tố này chỉ áp dụng cho cách Google triển khai robots.txt và có thể không phù hợp với các bên khác.

Khả năng áp dụng

Tất cả trình thu thập dữ liệu tự động của Google đều tuân theo các nguyên tắc đặt ra trong tài liệu này. Khi một tác nhân thay mặt cho người dùng truy cập một URL (chẳng hạn như để dịch nội dung, lấy các nguồn cấp dữ liệu được đăng ký thủ công, phân tích phần mềm độc hại, v.v.), thì tác nhân đó không cần phải tuân theo nguyên tắc này.

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

Tệp robots.txt phải nằm trong thư mục cấp cao nhất của máy chủ và có thể truy cập được qua giao thức và số cổng thích hợp. Các giao thức mà Google chấp nhận nói chung cho robots.txt là tất cả giao thức dựa trên URI. Còn riêng với Google Tìm kiếm (ví dụ như cho việc thu thập dữ liệu các trang web), chúng tôi chấp nhận "http" và "https". Trên http và https, Google sẽ tìm nạp tệp robots.txt thông qua yêu cầu GET không có điều kiện HTTP.

Dành riêng cho Google: Google cũng chấp nhận và tuân theo các tệp robots.txt cho các trang FTP. Có thể truy cập các tệp robots.txt dựa trên FTP thông qua giao thức FTP bằng cách sử dụng thông tin đăng nhập ẩn danh.

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

Ví dụ về URL robots.txt hợp lệ

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 hợp lệ. Trình thu thập dữ liệu sẽ không kiểm tra các tệp robots.txt trong thư mục con.
http://www.müller.eu/robots.txt Có hiệu lực với:
  • http://www.müller.eu/
  • http://www.xn--mller-kva.eu/

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

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/

Dành riêng cho Google: Chúng tôi sử dụng robots.txt cho các tài nguyên FTP.

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ý mã kết quả HTTP

Nhìn chung, có ba kết quả khác nhau khi tìm nạp các tệp robots.txt:

  • cho phép toàn bộ: Cho phép thu thập dữ liệu toàn bộ nội dung.
  • hoàn toàn không cho phép: Không cho phép thu thập dữ liệu nội dung nào.
  • cho phép có điều kiện: Các lệnh trong tệp robots.txt xác định khả năng thu thập dữ liệu một số nội dung nhất định.
Xử lý mã kết quả HTTP
2xx (thành công) Mã kết quả HTTP cho biết kết quả thành công sẽ dẫn đến "cho phép có điều kiện" đối với việc thu thập dữ liệu.
3xx (lệnh chuyển hướng) Google theo ít nhất năm bước chuyển hướng đối với HTTP/1.0 (như đã xác định trong RFC 1945), sau đó sẽ dừng lại và xem tệp robots.txt là lỗi 404. Chúng tôi không khuyến khích việc xử lý tệp robots.txt chuyển hướng đến các URL không được phép. Vì chưa tìm nạp quy tắc nào nên Google sẽ theo ít nhất năm bước chuyển hướng. Nếu không tìm thấy tệp robots.txt, Google sẽ xem tệp này như một lỗi 404. Google không khuyến khích việc xử lý các lệnh chuyển hướng logic cho tệp robots.txt dựa trên nội dung HTML trả về mã 2xx (khung, JavaScript hoặc lệnh chuyển hướng loại làm mới meta). Chúng tôi sẽ sử dụng nội dung của trang đầu tiên để tìm các quy tắc áp dụng.
4xx (lỗi ứng dụng) Google xử lý tất cả các lỗi 4xx theo cùng một cách và giả định rằng không có tệp robots.txt hợp lệ nào. Google cũng giả định rằng không có hạn chế nào. Kết quả sẽ là "cho phép toàn bộ" đối với việc thu thập dữ liệu.
5xx (lỗi máy chủ)

Lỗi máy chủ được coi là lỗi tạm thời dẫn đến việc "hoàn toàn không cho phép" thu thập dữ liệu. Yêu cầu được thử lại cho đến khi nhận được mã kết quả HTTP không phải lỗi máy chủ. Lỗi 503 (Service Unavailable) sẽ dẫn đến việc thực hiện lại yêu cầu khá thường xuyên. Nếu không thể truy cập 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 trong bộ nhớ đệm. Trong trường hợp không có cả bản sao, thì Google sẽ cho là không có quy tắc giới hạn nào đối với việc thu thập dữ liệu. Để tạm thời chặn hoạt động thu thập dữ liệu, bạn nên trả về mã kết quả HTTP 503.

Dành riêng cho Google: 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 để trả về mã 5xx thay vì 404 cho các trang bị thiếu, chúng tôi sẽ xem lỗi 5xx từ trang web đó là 404.

Yêu cầu không thành công hoặc dữ liệu không đầy đủ Google xem việc xử lý tệp robots.txt không thể tìm nạp do các sự cố liên quan đến DNS hoặc mạng – như hết thời gian chờ, phản hồi không hợp lệ, kết nối đặt lại/bị treo, lỗi khi nhóm dữ liệu HTTP – là lỗi máy chủ.
Lưu vào bộ nhớ đệm Nội dung trong tệp robots.txt thường được lưu trong bộ nhớ đệm tối đa 24 giờ, nhưng thời gian này có thể dài hơn trong các tình huống không thể làm mới phiên bản lưu trong 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 trong bộ đệm dựa trên các tiêu đề HTTP max-age Cache-Control.

Định dạng tệp

Định dạng tệp nên dùng là văn bản thuần túy được mã hóa bằng UTF-8. Tệp này bao gồm các dòng được phân tách bằng CR, CR/LF hoặc LF.

Google chỉ xem xét các dòng hợp lệ và bỏ qua tất cả nội dung khác. Ví dụ: nếu tài liệu cuối cùng là trang HTML, thì Google sẽ chỉ xem xét các dòng văn bản hợp lệ và loại bỏ phần còn lại mà không đưa ra cảnh báo hoặc lỗi.

Nếu tệp sử dụng một phương thức mã hóa tạo ra các ký tự không thuộc UTF-8, thì điều này có thể khiến hệ thống phân tích cú pháp nội dung của tệp không chính xác.

Google bỏ qua BOM (byte order mark) Unicode tùy chọn ở đầu tệp robots.txt.

Mỗi dòng hợp lệ bao gồm một trường, một dấu hai chấm và một giá trị. Khoảng trắng là không bắt buộc (nhưng nên dùng để cải thiện khả năng đọc). Bạn có thể chèn nhận xét tại bất kỳ vị trí nào trong tệp bằng ký tự "#"; tất cả nội dung sau dấu bắt đầu này cho đến cuối dòng đều được coi là nhận xét và sẽ bị bỏ qua. Định dạng chung là <field>:<value><#optional-comment>. Hệ thống bỏ qua khoảng trắng ở đầu và cuối dòng.

Phần tử <field> không phân biệt chữ hoa chữ thường. Phần tử <value> có thể phân biệt chữ hoa chữ thường, tùy thuộc vào phần tử <field>.

Hệ thống không hỗ trợ việc xử lý các phần tử <field> có lỗi hoặc lỗi đánh máy đơn giản (ví dụ: "useragent" thay vì "user-agent").

Có thể có giới hạn về kích thước tệp tối đa cho từng trình thu thập dữ liệu. Nội dung vượt quá kích thước tệp tối đa sẽ bị bỏ qua. Hiện tại, Google áp dụng giới hạn kích thước là 500 kibibyte (KiB). Để giảm kích thước của tệp robots.txt, hãy 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/định nghĩa chính thức

Dưới đây là nội dung mô tả về Augmented Backus-Naur Form (ABNF) theo RFC 5234

    robotstxt = *(group / emptyline)
    group = startgroupline                    ; We start with a user-agent
            *(startgroupline / emptyline)     ; ... and possibly more user-agents
            *(rule / emptyline)               ; followed by rules relevant for UAs

    startgroupline = *WS "user-agent" *WS ":" *WS product-token EOL

    rule = *WS ("allow" / "disallow") *WS ":" *WS (path-pattern / empty-pattern) EOL

    ; parser implementors: add additional lines you need (for example, Sitemaps), and
    ; be lenient when reading lines that don’t conform. Apply Postel’s law.

    product-token = identifier / "*"
    path-pattern = "/" *(UTF8-char-noctl)    ; valid URI path pattern; see 3.2.2
    empty-pattern = *WS

    identifier = 1*(%x2d / %x41-5a / %x5f / %x61-7a)
    comment = "#" *(UTF8-char-noctl / WS / "#")
    emptyline = EOL
    EOL = *WS [comment] NL         ; end-of-line may have optional trailing comment
    NL = %x0D / %x0A / %x0D.0A
    WS = %x20 / %x09

    ; UTF8 derived from RFC3629, but excluding control characters
    UTF8-char-noctl = UTF8-1-noctl / UTF8-2 / UTF8-3 / UTF8-4
    UTF8-1-noctl    = %x21 / %x22 / %x24-7F  ; excluding control, space, '#'
    UTF8-2          = %xC2-DF UTF8-tail
    UTF8-3          = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
                      %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
    UTF8-4          = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
                      %xF4 %x80-8F 2( UTF8-tail )
    UTF8-tail       = %x80-BF
    

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

Một hoặc nhiều dòng tác nhân người dùng đứng trước một hoặc nhiều quy tắc. Điểm kết thúc của nhóm là một dòng tác nhân người dùng hoặc điểm cuối tệp. Nhóm cuối cùng có thể không có quy tắc, có nghĩa là nhóm này cho phép mọi hoạt động (theo ngầm định).

Ví dụ về các nhóm:

    user-agent: a
    disallow: /c

    user-agent: b
    disallow: /d

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

    user-agent: h
    

Có bốn nhóm riêng biệt được xác định: một cho "a", một cho "b" và một cho cả "e" và "f". Ngoại trừ nhóm cuối cùng, mỗi nhóm đều có các dòng riêng. Nhóm cuối cùng không có dòng nào. Xin lưu ý rằng bạn có thể sử dụng khoảng trắng và dòng trống để cải thiện khả năng đọc.

Thứ tự ưu tiên cho tác nhân người dùng

Chỉ một nhóm nhất định có hiệu lực với một trình thu thập dữ liệu cụ thể. Trình thu thập dữ liệu phải xác định nhóm chính xác bằng cách tìm nhóm có tác nhân người dùng cụ thể nhất mà vẫn phù hợp. Trình thu thập dữ liệu sẽ bỏ qua tất cả các nhóm khác. Tác nhân người dùng có phân biệt chữ hoa chữ thường. Tất cả văn bản không phù hợ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 có nhiều nhóm cho một tác nhân người dùng cụ thể, thì tất cả quy tắc trong các nhóm áp dụng cho một tác nhân người dùng cụ thể sẽ được kết hợp.

Ví dụ

Giả sử có một tệp robots.txt sau:

    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 Tác nhân này tuân theo nhóm 1. Tác nhân này chỉ theo nhóm cụ thể nhất và bỏ qua tất cả nhóm khác.
Googlebot (web) Tác nhân này tuân theo nhóm 3.
Googlebot Images Tác nhân này tuân theo nhóm 3. Không có nhóm googlebot-images cụ thể nào, do đó, tác nhân này sẽ theo nhóm chung.
Googlebot News (khi thu thập dữ liệu hình ảnh) >Tác nhân này tuân theo nhóm 1. Những hình ảnh này do Googlebot News thu thập dữ liệu và do đó, tác nhân này chỉ theo nhóm Googlebot News.
Otherbot (web) Tác nhân này tuân theo nhóm 2.
Otherbot (News) Tác nhân này 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.

Hãy xem cả phần trình thu thập dữ liệu của Google và chuỗi tác nhân người dùng.

Quy tắc về các dòng trong nhóm

Phần này chỉ đề cập đến các quy tắc chuẩn về các dòng trong nhóm. Những quy tắc này cũng được gọi là "lệnh" đối với các trình thu thập dữ liệu. Các lệnh này đượ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. Các lệnh không có [path] sẽ bị bỏ qua.

Giá trị [path], nếu được chỉ định, phải nằm ở vị trí tương đối tại thư mục gốc của trang web mà 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 dẫn có phân biệt chữ hoa chữ thường. Bạn có thể tìm thêm thông tin trong phần "Tìm URL phù hợp dựa trên giá trị đường dẫn" bên dưới.

disallow

Lệnh disallow chỉ định các đường dẫn mà các trình thu thập dữ liệu đã chỉ định không được 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.

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.

Cách sử dụng:

    allow: [path]
    

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

Giá trị đường dẫn được sử dụng 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. Ngoại trừ các ký tự đại diện, đường dẫn được sử dụng để khớp với phần đầu của một URL (và mọi URL hợp lệ bắt đầu bằng cùng một đường dẫn). 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, Yahoo 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.
/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
/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/

Dấu gạch chéo có nghĩa là mục này khớp với mọi đường dẫn nằm trong thư mục này.

Khớp:

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

Không khớp:

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

Khớp:

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

Không khớp:

  • / (ngay cả khi ánh xạ tới /index.php)
  • /windows.PHP
/*.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:

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

Không khớp: /Fish.PHP

Các dòng không thuộc một nhóm mà Google hỗ trợ

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

Cách sử dụng:

    sitemap: [absoluteURL]
    

[absoluteURL] trỏ đến một tệp Sơ đồ trang web, Chỉ mục sơ đồ trang web hoặc URL tương đương. URL không bắt buộc phải nằm trong cùng một máy chủ với tệp robots.txt. Có thể tồn tại nhiều mục sitemap. Là các dòng không thuộc một nhóm, các mục này không gắn liền với tác nhân người dùng cụ thể nào. Tất cả các trình thu thập dữ liệu đều có thể tuân theo các dòng này, miễn là không bị chặn.

Thứ tự ưu tiên cho các dòng thuộc một nhóm

Ở cấp độ dòng thuộc một nhóm, cụ thể là đối với các lệnh allowdisallow, quy tắc cụ thể nhất dựa trên độ dài của mục [path] sẽ được áp dụng thay vì quy tắc kém cụ thể hơn (ngắn hơn). Trong trường hợp các quy tắc xung đột với nhau, bao gồm cả các quy tắc có ký tự đại diện, quy tắc ít hạn chế nhất sẽ được sử dụng.

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

allow: /p

disallow: /

Kết quả: allow

http://example.com/folder/page

allow: /folder

disallow: /folder

Kết quả: allow

http://example.com/page.htm

allow: /page

disallow: /*.htm

Kết quả: undefined

http://example.com/

allow: /$

disallow: /

Kết quả: allow

http://example.com/page.htm

allow: /$

disallow: /

Kết quả: disallow