Google 如何解讀 robots.txt 規格

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

本頁說明 Google 對 REP 的解讀方式。如需原始標準,請查看 RFC 9309

什麼是 robots.txt 檔案?

如果不想讓檢索器存取您網站的部分內容,您可以建立含有適當規則的 robots.txt 檔案。robots.txt 檔案是一個簡單的文字檔案,其中包含的規則決定哪些檢索器可存取網站,以及能存取網站的哪些部分。舉例來說,example.com 的 robots.txt 檔案可能會像這樣:

# This robots.txt file controls crawling of URLs under https://example.com.
# All crawlers are disallowed to crawl files in the "includes" directory, such
# as .css, .js, but Google needs them for rendering, so Googlebot is allowed
# to crawl them.
User-agent: *
Disallow: /includes/

User-agent: Googlebot
Allow: /includes/

Sitemap: https://example.com/sitemap.xml

如果您是第一次使用 robots.txt,請先參閱我們的 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 網址示例及其有效網址路徑。 第一欄會列出 robots.txt 檔案的網址,第二欄則會列出 robots.txt 檔案所套用和不應套用的網域。

robots.txt 網址示例
https://example.com/robots.txt

這是一般的情況。對其他子網域、通訊協定或通訊埠號碼而言,這不是有效網址,但對於在同一主機上、具備相同通訊協定和通訊埠號碼的所有子目錄檔案而言,這是有效網址。

適用於:
  • https://example.com/
  • https://example.com/folder/file
不適用於:
  • https://other.example.com/
  • http://example.com/
  • https://example.com:8181/
https://www.example.com/robots.txt

子網域上的 robots.txt 僅對該子網域有效力。

適用於: https://www.example.com/

不適用於:

  • https://example.com/
  • https://shop.www.example.com/
  • https://www.shop.example.com/
https://example.com/folder/robots.txt 不是有效的 robots.txt 檔案。檢索器不會檢查子目錄中的 robots.txt 檔案。
https://www.exämple.com/robots.txt

IDN 相當於域名代碼版本。請一併參閱 RFC 3492

適用於:
  • https://www.exämple.com/
  • https://xn--exmple-cua.com/

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

ftp://example.com/robots.txt

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

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

https://212.96.82.21/robots.txt

如果 robots.txt 以 IP 位址為主機名稱,則只有在檢索做為主機名稱的該 IP 位址時才有效力。該 robot.txt 不會自動對所有由該 IP 位址代管的網站生效 (不過 robots.txt 檔案也可能處於共用狀態,此時在共用主機名稱下也可使用該 robots.txt 檔案)。

適用於: https://212.96.82.21/

不適用於: https://example.com/ (即使由 212.96.82.21 代管)

https://example.com:443/robots.txt

標準通訊埠號碼 (HTTP 為 80,HTTPS 為 443, FTP 為 21) 等同於其對應的預設主機名稱。

適用於:

  • https://example.com:443/
  • https://example.com/

不適用於: https://example.com:444/

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

採用非標準通訊埠號碼的 robots.txt 檔案,僅適用於透過這些通訊埠號碼提供的內容。

適用於: https://example.com:8181/

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

錯誤和 HTTP 狀態碼的處理方式

要求 robots.txt 檔案時,伺服器回應的 HTTP 狀態碼會影響 Google 檢索器使用 robots.txt 的方式。下表大致列出 Googlebot 如何針對不同的 HTTP 狀態碼處理 robots.txt 檔案。

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

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

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

4xx (client errors)

Google 檢索器會將所有 4xx 錯誤 (429 除外) 視為網站並無有效 robots.txt 檔案。這表示 Google 會假設沒有任何檢索限制。

5xx (server errors)

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

如要暫時停止檢索作業,建議您為網站中的每個網址都提供一個 503 HTTP 狀態碼。

如果我們能夠確認網站設定有誤,導致網頁缺漏問題無法正確傳回 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 欄位也稱為規則 (又稱為指令)。這些規則一律以 rule: [path] 的形式來指定,其中 [path] 為選用部分。根據預設,指定的檢索器並沒有任何檢索限制。檢索器會忽略沒有 [path] 的規則。

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

user-agent

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

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

disallow

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

Google 無法將禁止檢索的網頁內容編入索引,但仍可能為該網址建立索引,並在搜尋結果中顯示 (但不顯示網頁摘要)。瞭解如何禁止建立索引

disallow 規則的值須區分大小寫。

使用方式:

disallow: [path]

allow

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

allow 規則的值須區分大小寫。

使用方式:

allow: [path]

sitemap

Google、Bing 和其他主流搜尋引擎均支援 sitemaps.org 定義下在 robots.txt 中的 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。
Google StoreBot Storebot-Google 會採用群組 2,因為規則中未明確列出 Storebot-Google 群組。
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
  • /desert/fish
/fish/

比對 /fish/ 資料夾中的所有項目。

相符:

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

不相符:

  • /fish
  • /fish.html
  • /animals/fish/
  • /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 檢索器對特定網址套用哪些規則。

情況範例
https://example.com/page
allow: /p
disallow: /

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

https://example.com/folder/page
allow: /folder
disallow: /folder

適用規則allow: /folder,因為在規則發生衝突的情況下,Google 會使用限制最少的規則。

https://example.com/page.htm
allow: /page
disallow: /*.htm

適用的規則disallow: /*.htm,因為規則路徑的長度較長,且與網址中的更多字元相符,因此較明確。

https://example.com/page.php5
allow: /page
disallow: /*.ph

適用規則allow: /page,因為在規則發生衝突的情況下,Google 會使用限制最少的規則。

https://example.com/
allow: /$
disallow: /

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

https://example.com/page.htm
allow: /$
disallow: /

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