Google 如何解讀 robots.txt 規格

Google 的自動檢索器支援漫遊器排除通訊協定 (REP)。這表示在檢索網站之前,Google 檢索器會下載並剖析網站的 robots.txt 檔案,以擷取網站哪個部分可供檢索的資訊。REP 不適用於由使用者控管的 Google 檢索器 (例如動態饋給訂閱),或是用於提升使用者安全性的檢索器 (例如惡意軟體分析)。

什麼是 robots.txt 檔案?

如果不想讓檢索器存取您網站的部分內容,您可以建立含有適當規則的 robots.txt 檔案。robots.txt 檔案是一個簡單的文字檔案,其中包含檢索器可存取網站哪些部分的相關規則。

檔案位置和效力範圍

您必須透過支援的通訊協定,將 robots.txt 檔案放在網站的頂層目錄中。如果是 Google 搜尋,支援的通訊協定為 HTTP、HTTPS 和 FTP。使用 HTTP 和 HTTPS 時,檢索器會透過 HTTP 非條件 GET 要求來擷取 robots.txt 檔案;而使用 FTP 時,檢索器則會透過匿名登入方式使用標準 RETR (RETRIEVE) 指令。

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.exämple.com/robots.txt 適用於:
  • http://www.exämple.com/
  • http://xn--exmple-cua.com/

不適用於: http://www.example.com/

ftp://example.com/robots.txt

適用於: ftp://example.com/

不適用於: http://example.com/

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 檔案時,伺服器回應的 HTTP 狀態碼會影響 Google 檢索器使用 robots.txt 的方式。

錯誤和 HTTP 狀態碼的處理方式
2xx (成功) 發出成功訊息的 HTTP 狀態碼會提示 Google 檢索器處理伺服器提供的 robots.txt 檔案。
3xx (重新導向)

依據 RFC 1945 的定義,Google 允許至少五個重新導向躍點,之後便會停止並判定 robots.txt 發生 404 錯誤。由於檢索器因重新導向而無法擷取規則,因此以上情況也適用於重新導向鏈結中所有遭到禁止的網址。

Google 不會追蹤 robots.txt 檔案中的邏輯重新導向 (頁框、JavaScript 或中繼重新整理類型的重新導向)。

4xx (用戶端錯誤)

Google 檢索器會將所有 4xx 錯誤視為網站沒有有效 robots.txt 檔案的情況來處理,這表示檢索作業不會受到任何限制。

5xx (伺服器錯誤)

由於伺服器無法對 Google 的 robots.txt 要求提供明確回應,因此 Google 會認為該網站完全禁止檢索,並暫時解讀為伺服器錯誤。在獲得非伺服器錯誤的 HTTP 狀態碼之前,Google 會嘗試檢索 robots.txt 檔案。503 (service unavailable) 錯誤會導致系統相當頻繁地重試。如果 Google 超過 30 天都無法連上 robots.txt,就會使用 robots.txt 的最後一個快取副本。如果找不到快取資料,Google 會假設沒有任何檢索限制。

如果我們能夠確認網站設定有誤,導致網頁缺漏問題無法正確傳回 404 狀態碼,而是傳回 5xx 狀態碼,那麼我們會把該網站傳回的 5xx 錯誤視為 404 錯誤來處理。舉例來說,如果傳回 5xx 狀態碼的網頁錯誤訊息是「找不到網頁」,我們會將該狀態碼解讀為 404 (not found)

其他錯誤 對於因為 DNS 或網路問題 (例如逾時、無效回應、重設或中斷的連線、HTTP 區塊化錯誤等) 而無法擷取的 robots.txt 檔案,系統在處理時會視為發生伺服器錯誤

快取

Google 通常會快取 robots.txt 檔案的內容,最多保留 24 小時,但如果在無法重新整理快取版本的情況下 (例如逾時或 5xx 錯誤),則會延長快取的保留時間。快取回應可由不同的檢索器共用。 Google 可能會依 max-age Cache-Control HTTP 標頭增加或減少快取的效期。

檔案格式

robots.txt 檔案必須是 UTF-8 編碼的純文字檔案,而且每行須以 CRCR/LFLF 分隔。

Google 會忽略 robots.txt 檔案中無效的行,包括 robots.txt 檔案開頭的 Unicode 位元組順序標記 (BOM),而只使用有效的行。舉例來說,如果下載的內容是 HTML 而非 robots.txt 規則,Google 會嘗試剖析內容及擷取規則,並忽略所有其他內容。

同樣地,如果 robots.txt 檔案的字元編碼不是 UTF-8,Google 會忽略不屬於 UTF-8 範圍的字元,進而導致 robots.txt 規則可能無法轉譯。

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

語法

有效的 robots.txt 行包含一個欄位、一個冒號和一個值。您可選擇是否要使用空格,但建議使用以改善可讀性。行開頭和結尾的空格會遭到忽略。如要加入註解,請在註解前方加上 # 字元。請注意,系統會忽略 # 字元之後的所有內容。一般格式為 <field>:<value><#optional-comment>

Google 支援下列欄位:

  • user-agent:識別要套用規則的檢索器。
  • allow:可供檢索的網址路徑。
  • disallow:可能無法檢索的網址路徑。
  • sitemap:Sitemap 的完整網址。

allowdisallow 欄位也稱為「指令」。這些指令一律以 directive: [path] 的形式來指定,其中 [path] 為選用部分。根據預設,指定的檢索器並沒有任何檢索限制。檢索器會忽略沒有 [path] 的指令。

在擷取網站的 robots.txt 檔案時 (使用同樣的通訊協定、通訊埠號碼、主機和網域名稱),[path] 值 (如有指定) 會與網站的根目錄相對。路徑值的開頭必須為 / 才能指定根目錄,而且值須區分大小寫。進一步瞭解以路徑值為基準的網址比對

user-agent

user-agent 行會識別要套用規則的檢索器。如需可在 robots.txt 檔案中使用的使用者代理程式程式字串完整清單,請參閱 Google 檢索器和使用者代理程式字串

user-agent 行的值無須區分大小寫。

disallow

disallow 指令會指明不得由 user-agent 行 (與 disallow 指令同組) 指定的檢索器存取的路徑。檢索器會忽略不含路徑的指令。

disallow 指令的值須區分大小寫。

使用方式:

disallow: [path]

allow

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

allow 指令的值須區分大小寫。

使用方式:

allow: [path]

sitemap

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

sitemap 欄位的值須區分大小寫。

使用方式:

sitemap: [absoluteURL]

[absoluteURL] 行會指向 Sitemap 或 Sitemap 索引檔的位置,必須使用包括通訊協定和主機的完整網址,且不必經過網址編碼處理。該網址所在的主機無須與 robots.txt 檔案相同。您可以指定多個 sitemap 欄位。Sitemap 欄位不會綁定到任何特定的使用者代理程式,只要檢索作業未遭到禁止,所有檢索器都可能採用。

例如:

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

行和規則的分組方式

您可以將各個檢索器的 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」的使用者代理程式。
  • 一組為「h」使用者代理程式。

如需群組的技術說明,請參閱 REP 第 2.1 節

使用者代理程式的優先順序

對於某個特定的檢索器而言,只有一個群組會生效。Google 檢索器會在 robots.txt 檔案中找出某個群組,其內含的使用者代理程式與檢索器的使用者代理程式最為相符,並將其判斷為正確的規則群組,而忽略其他群組。所有不相符的文字都會遭到忽略 (例如 googlebot/1.2googlebot* 均等同於 googlebot),且 robots.txt 檔案中的群組順序不影響這項判斷。

如果對使用者代理程式宣告多個群組,系統會將該使用者代理程式適用群組中的所有規則在內部合併為單一群組。系統不會將全域群組 (*) 和明確指定了使用者代理程式的群組合併。

範例

user-agent 欄位的比對方式

user-agent: googlebot-news
(group 1)

user-agent: *
(group 2)

user-agent: googlebot
(group 3)

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

各檢索器採用的群組
Googlebot News googlebot-news 會採用群組 1,因為群組 1 是最明確符合規則的群組。
Googlebot (網路) googlebot 會採用群組 3。
Googlebot Images googlebot-images 會採用群組 2,因為規則中未明確列出 googlebot-images 群組。
Googlebot News (檢索圖片時) 檢索圖片時,googlebot-news 會採用群組 1。 googlebot-news 不會檢索 Google 圖片搜尋結果中的圖片,因此只會採用群組 1。
Otherbot (網路) 其他 Google 檢索器會採用群組 2。
Otherbot (新聞) 檢索新聞內容但不屬於 googlebot-news 的其他 Google 檢索器會採用群組 2。即使有項目適用於相關的檢索器,也只有在檢索條件相符時才會生效。

規則的分組方式

如果 robots.txt 檔案中有多個與特定使用者代理程式相關的群組,Google 檢索器會在內部合併這些群組。例如:

user-agent: googlebot-news
disallow: /fish

user-agent: *
disallow: /carrots

user-agent: googlebot-news
disallow: /shrimp

檢索器會根據使用者代理程式在內部將規則分組,例如:

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

user-agent: *
disallow: /carrots

robots.txt 剖析器會忽略 allowdisallowuser-agent 以外的規則。這表示系統會將下列 robots.txt 程式碼片段視為一個群組,因此 user-agent ab 都會受 disallow: / 規則影響:

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

user-agent: b
disallow: /

處理 robots.txt 規則時,檢索器會忽略 sitemap 行。 舉例來說,檢索器會認為上一段 robots.txt 程式碼片段其實是下面這個意思:

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

依據路徑值比對網址

Google 會將 allowdisallow 指令中的路徑值做為基準,判斷是否要對網站上的特定網址套用規則,方法是將規則與檢索器嘗試擷取的網址路徑元件比對。如果路徑中有非 7 位元 ASCII 字元,系統可能會按照 RFC 3986,將其視為 UTF-8 字元或百分比逸出的 UTF-8 編碼字元並加入路徑中。

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

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

比對所有以 /fish 開頭的路徑。

相符項目:

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

不相符項目:

  • /Fish.asp
  • /catfish
  • /?id=fish
  • /desert/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/
  • /animals/fish/
  • /fish/?id=anything
  • /fish/salmon.htm

不相符項目:

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

比對所有包含 .php 的路徑。

相符項目:

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

不相符項目:

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

比對所有以 .php 結尾的路徑。

相符項目:

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

不相符項目:

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

依序比對所有包含 /fish.php 的路徑。

相符項目:

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

不符合項目: /Fish.PHP

規則的優先順序

將 robots.txt 規則與網址比對時,檢索器會根據網址路徑長度,使用最適合的規則。如果規則發生衝突 (包括含有萬用字元的規則),則 Google 會使用限制最少的規則。

以下範例說明 Google 檢索器對特定網址套用哪些規則。

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

allow: /p
disallow: /

適用規則allow: /p,因為規則較為明確。

http://example.com/folder/page

allow: /folder
disallow: /folder

適用規則allow: /folder,因為如果有相符的規則,Google 會使用限制最少的規則。

http://example.com/page.htm

allow: /page
disallow: /*.htm

適用規則disallow: /*.htm,因為比對網址的字元數較多,比對規則較為明確。

http://example.com/page.php5

allow: /page
disallow: /*.ph

適用規則allow: /page,因為如果有相符的規則,Google 會使用限制最少的規則。

http://example.com/

allow: /$
disallow: /

適用規則allow: /$,因為規則較為明確。

http://example.com/page.htm

allow: /$
disallow: /

適用規則disallow: /,因為 allow 規則僅適用於根網址。