Robots.txt 規範

摘要

本文詳細說明 Google 如何處理 robots.txt 檔案。robots.txt 檔案可協助您控管 Google 網站檢索器如何檢索可公開存取的網站,以及如何為這類網站建立索引。

異動內容

2019 年 7 月 1 日,Google 宣布致力讓 robots.txt 通訊協定成為網際網路標準,相關異動已反映在本文件中。

基本定義

定義
檢索器 檢索器是一種用於檢索網站內容的服務或代理程式。一般而言,檢索器會自動且遞迴存取已知的主機網址,其中提供了可透過標準網路瀏覽器存取的內容。透過各種方式 (例如已檢索的現有網頁上的連結,或 Sitemap 檔案) 發現新的網址時,檢索器也會以同樣的方式檢索這些新網址。
使用者代理程式 找出特定檢索器或一組檢索器的工具。
指令 robots.txt 檔案中列出的檢索規定清單,適用於特定檢索器或一系列檢索器。
網址 統一資源定位器,定義按照 RFC 1738 中所述。
Google 的處理方式 這些元素僅適用於 Google 所採用的 robots.txt 實作方法,不一定適用於其他服務。

適用性

Google 的所有自動式檢索器均遵循這份文件中提及的規範運作。代理程式代替使用者存取網址時 (例如翻譯、手動訂閱的動態饋給、惡意軟體分析),則無須遵守這些規範。

檔案位置和效力範圍

robots.txt 檔案必須位於主機的頂層目錄中,並可透過適當的通訊協定和通訊埠號碼存取。robots.txt 一般接受的通訊協定均以 URI 為基礎,但如果是 Google 搜尋 (例如網站檢索),則為「http」和「https」。使用 http 和 https 時,系統會透過 HTTP 非條件式 GET 要求來擷取 robots.txt 檔案。

Google 的處理方式:Google 同樣接受及採用 FTP 站台的 robots.txt 檔案。系統可藉由匿名登入的方式,透過 FTP 通訊協定存取 FTP 的 robots.txt 檔案。

robots.txt 檔案中所列出的指令僅適用於代管該檔案的主機、通訊協定和通訊埠號碼。

有效 robots.txt 網址範例

robots.txt 網址範例
http://example.com/robots.txt 有效範圍:
  • http://example.com/
  • http://example.com/folder/file
無效範圍:
  • http://other.example.com/
  • https://example.com/
  • http://example.com:8181/
http://www.example.com/robots.txt

有效範圍:http://www.example.com/

無效範圍:

  • http://example.com/
  • http://shop.www.example.com/
  • http://www.shop.example.com/
http://example.com/folder/robots.txt 不是有效的 robots.txt 檔案。檢索器不會檢查子目錄中的 robots.txt 檔案。
http://www.müller.eu/robots.txt 有效範圍:
  • http://www.müller.eu/
  • http://www.xn--mller-kva.eu/

無效範圍:http://www.muller.eu/

ftp://example.com/robots.txt

有效範圍:ftp://example.com/

無效範圍:http://example.com/

Google 的處理方式:針對 FTP 資源,我們採用 robots.txt。

http://212.96.82.21/robots.txt

有效範圍:http://212.96.82.21/

無效範圍:http://example.com/ (即使由 212.96.82.21 代管)

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

有效範圍:

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

無效範圍:http://example.com:81/

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

有效範圍:http://example.com:8181/

無效範圍:http://example.com/

處理 HTTP 結果碼

一般而言,robots.txt 檔案在經過擷取後會產生三種結果:

  • 全部允許:可檢索所有內容。
  • 全部禁止:不檢索任何內容。
  • 有條件允許:根據 robots.txt 中的指令決定是否檢索特定內容。
處理 HTTP 結果碼
2xx (成功) 發出成功訊息的 HTTP 結果碼造成「有條件允許」的檢索作業。
3xx (重新導向) Google 依 RFC 1945 的定義,針對 HTTP/1.0 採用至少五個重新導向躍點,然後會停止並判定發生 404 錯誤。Google 不鼓勵處理目標為遭禁止網址的 robots.txt 重新導向;由於尚未擷取任何規則,因此 Google 會採用至少五個重新導向躍點,假使找不到任何 robots.txt,則會針對 robots.txt 判定發生 404 錯誤。針對以傳回 2xx 代碼的 HTML 內容為基礎的 robots.txt 檔案,Google 不鼓勵處理這類檔案的邏輯重新導向 (頁框、JavaScript 或中繼重新整理類型的重新導向),並會使用第一個頁面的內容尋找適用規則。
4xx (用戶端錯誤) Google 會以同樣的方式處理所有 4xx 錯誤,並假設不存在任何有效的 robots.txt 檔案。這種做法會假設沒有任何重新導向。對檢索作業而言,即為「全部允許」。
5xx (伺服器錯誤)

我們會將伺服器錯誤視為會造成檢索作業「全部禁止」的暫時性錯誤,也會重試要求,直到取得非伺服器錯誤的 HTTP 結果碼為止。503 (服務無法使用) 錯誤會導致系統相當頻繁地重試。如果 Google 無法連上 robots.txt 超過 30 天,就會使用 robots.txt 的最後一個快取副本。如果找不到快取資料,Google 會假設沒有任何檢索限制。如要暫時停止檢索作業,建議您提供 503 HTTP 結果碼。

Google 的處理方式:如果我們能夠確認網站設定有誤,導致網頁缺漏問題無法正確傳回 404 代碼,而是傳回 5xx 代碼,那麼我們會把該網站傳回的 5xx 錯誤視為 404 來處理。

要求失敗或資料不完整 針對因 DNS 或網路問題 (例如逾時、無效的回應、重設或中斷的連線,以及 HTTP 區塊化錯誤) 而無法擷取的 robots.txt 檔案,系統會將這類檔案的處理作業視為伺服器錯誤
快取 一般而言,robots.txt 內容的快取時間可達 24 小時,但如果發生無法重新整理快取版本的情況 (原因包括逾時或 5xx 錯誤),則快取的時間可能會更長。快取回應可由不同的檢索器共用。Google 可能會依 max-age Cache-Control HTTP 標頭增加或減少快取的效期。

檔案格式

檔案格式應為採用 UTF-8 編碼的純文字檔,其中包含由 CR、CR/LF 或 LF 分隔的行。

有效的行才會列入考量;所有其他內容都會遭到忽略。舉例來說,如果結果文件為 HTML 網頁,系統只會將有效的文字行納入考量,並在未顯示警告或錯誤的情況下捨棄其餘部分。

如果使用的字元編碼會導致出現非 UTF-8 子集的字元,系統可能會無法正確剖析檔案內容。

robots.txt 檔案開頭的選用 Unicode BOM (位元組順序標記) 會遭到忽略。

每個有效行都包含一個欄位、一個冒號和一個值。您可選擇是否要使用空格 (但建議使用以改善可讀性)。使用「#」字元即可在檔案中的任何位置加註;系統會將註解開頭到該行結尾間的所有內容視為註解,並予以忽略。一般格式為 <field>:<value><#optional-comment>。行開頭和結尾的空白字元會遭到忽略。

<field> 元素無須區分大小寫。視 <field> 元素而定,<value> 元素有可能要區分大小寫。

系統不支援處理含有簡單錯誤或錯字 (例如「useragent」而非「user-agent」) 的 <field> 元素。

各檢索器可能會強制規定檔案大小上限。超過檔案大小上限的內容會遭到忽略。Google 目前強制規定的大小上限為 500 KiB。如要縮減 robots.txt 檔案的大小,請整合會導致 robots.txt 檔案過大的指令。例如,您可以將排除的內容放在獨立的目錄中。

正式語法/定義

以下是 RFC 5234 中所述的擴展巴科斯範式 (ABNF) 說明。

    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
    

行和規則的分組

一或多個 user-agent 行,後面接上一或多項規則。如果出現另一個 user-agent 行或到了檔案結尾,即表示群組結束。最後一個群組可能沒有任何規則,等於允許所有內容。

群組範例:

    user-agent: a
    disallow: /c

    user-agent: b
    disallow: /d

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

    user-agent: h
    

這裡指定了四個不同的群組,其中一個為「a」、另一個為「b」,還有一個是包含了「e」和「f」的群組。除了最後一個群組以外,每個群組都有各自的 group-member 行。最後一個群組沒有任何內容。請注意,您可以選擇使用空白字元和沒有內容的空行來改善可讀性。

user-agent 的優先順序

對於某個特定的檢索器而言,只有一個群組會生效。檢索器必須決定正確的行群組,方法是找出 user-agent 條件最詳細且依然相符的群組。所有其他群組都會遭到檢索器忽略。user-agent 須區分大小寫。所有不相符的文字都會遭到忽略 (例如 googlebot/1.2googlebot* 均等同於 googlebot)。robots.txt 檔案中的群組順序在此並沒有關聯性。

如果特定 user-agent 有多個群組,系統會合併特定 user-agent 適用群組中的所有規則。

範例

假設 robots.txt 檔案的設定如下:

    user-agent: googlebot-news
    (group 1)

    user-agent: *
    (group 2)

    user-agent: googlebot
    (group 3)
    

以下說明檢索器如何決定相關的群組:

各檢索器採用的群組
Googlebot 新聞 採用的群組為群組 1。只會採用檢索條件最詳盡的群組,所有其他群組都會遭到忽略。
Googlebot (網路) 採用的群組為群組 3。
Googlebot 圖片 採用的群組為群組 3。由於沒有特定的 googlebot-images 群組,因此會採用檢索條件較籠統的群組。
Googlebot 新聞 (檢索圖片時) 採用的群組為群組 1。Googlebot 新聞本身會針對這些圖片執行檢索,因此只採用 Googlebot 新聞群組。
Otherbot (網路) 採用的群組為群組 2。
Otherbot (新聞) 採用的群組為群組 2。即使有項目適用於相關的檢索器,也只有在檢索條件相符時才會生效。

另請參閱 Google 檢索器和 user-agent 字串一文。

Group-member 規則

本節僅涵蓋標準 group-member 規則。這些規則也稱為檢索器的「指令」。這些指令是以 directive: [path] 的形式來指定,其中 [path] 為選用部分。根據預設,指定的檢索器並沒有任何檢索限制。沒有 [path] 的指令會遭忽略。

擷取網站的 robots.txt 檔案時 (使用同樣的通訊協定、通訊埠號碼、主機和網域名稱),系統會將 [path] 值 (如有指定) 視為與網站的根目錄相對。路徑值的開頭必須為「/」才能指定根目錄。路徑有大小寫之分。詳情請參閱下方的「以路徑值為基準的網址比對」一節。

disallow

disallow 指令會指明特定檢索器不得存取的路徑。如未指定路徑,這個指令會遭到忽略。

使用方式:

    disallow: [path]
    

allow

allow 指令會指明特定檢索器可存取的路徑。如未指定路徑,這個指令會遭到忽略。

使用方式:

    allow: [path]
    

以路徑值為基準的網址比對

路徑值可做為基準,以判定是否要將某項規則套用至網站上的特定網址。除了萬用字元以外,路徑會用來比對網址的開頭 (以及任何以同樣路徑開頭的有效網址)。如果路徑中有非 7 位元 ASCII 字元,系統可能會按照 RFC 3986,在納入這些字元時其視為 UTF-8 字元或百分比逸出的 UTF-8 編碼字元。

Google、Bing 和其他主流搜尋引擎支援的路徑值「萬用字元」形式有限。這些形式包括:

  • * 代表 0 或更多的任一有效字元例項。
  • $ 代表網址結尾。
路徑比對範例
/ 比對根目錄以及所有層級較低的網址
/* 等同於 /。結尾的萬用字元會遭到忽略。
/fish

相符:

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

不相符:

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

等同於 /fish。結尾的萬用字元會遭到忽略。

相符:

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

不相符:

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

結尾的斜線代表比對這個資料夾中的所有項目。

相符:

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

不相符:

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

相符:

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

不相符:

  • / (即使對應到 /index.php)
  • /windows.PHP
/*.php$

相符:

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

不相符:

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

相符:

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

不相符:/Fish.PHP

Google 支援的 non-group-member 行

sitemaps.org 所定義,Google、Bing 和其他主流搜尋引擎均支援 sitemap

使用方式:

    sitemap: [absoluteURL]
    

[absoluteURL] 會指向 Sitemap、Sitemap 索引檔案或對等的網址。該網址所在的主機無須與 robots.txt 檔案相同。存在的 sitemap 項目可能不止一個。做為 non-group-member 行,這類項目不會綁定到任何特定的 user-agent,且可由所有檢索器採用 (如未遭到禁止)。

group-member 行的優先順序

在 group-member 層級,特別是對 allowdisallow 指令而言,如果參照的規則是以 [path] 項目長度為基準,那麼檢索條件最詳盡的規則,會優先於檢索條件較不詳盡 (較短) 的規則。如果規則發生衝突 (包括含有萬用字元的規則),則會使用限制最少的規則。

情況範例
http://example.com/page

allow: /p

disallow: /

認定結果allow

http://example.com/folder/page

allow: /folder

disallow: /folder

認定結果allow

http://example.com/page.htm

allow: /page

disallow: /*.htm

認定結果undefined

http://example.com/

allow: /$

disallow: /

認定結果allow

http://example.com/page.htm

allow: /$

disallow: /

認定結果disallow