Robots.txt 規範

摘要

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

條件用語

這份文件中所提到的下列關鍵字:「必須」、「不得」、「必要」、「應」、「不應」、「應該」、「不應該」、「建議」、「可能」及「選用」,均按照 RFC 2119 的說明描述使用。

基本定義

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

適用性

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

檔案位置和效力範圍

robots.txt 檔案必須位在主機的頂層目錄中,且能夠以適當的通訊協定和通訊埠號碼存取。robots.txt (及網站檢索) 一般接受的通訊協定為「http」和「https」。使用 http 和 https 時,robots.txt 檔案會由 HTTP 非條件式 GET 要求來擷取。

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 (重新導向) 一般而言,在找出有效結果 (或發現有迴圈問題) 之前,我們會一直追蹤重新導向的網址。我們追蹤的重新導向躍點數量有限 (以 HTTP/1.0 來說,RFC 1945 允許的躍點是 5 個),達到上限後便會停止,並且視為 404 錯誤。如果處理禁止網址的 robots.txt 重新導向,這種做法並未經過定義,我們也不鼓勵這種做法。如果針對以傳回 2xx (頁框、JavaScript 或中繼重新整理類型的重新導向) 的 HTML 內容為基礎的 robots.txt 檔案邏輯重新導向進行處理,這種做法並未經過定義,我們也不鼓勵這種做法。
4xx (用戶端錯誤) Google 會以同樣的方式處理所有 4xx 錯誤,就是假設沒有任何有效的 robots.txt 檔案存在。這種做法會假設沒有任何限制。對檢索作業而言,即為「全部允許」。
5xx (伺服器錯誤)

我們會將伺服器錯誤視為會造成檢索作業「全部禁止」的暫時性錯誤,也會重試要求,直到取得非伺服器錯誤的 HTTP 結果碼為止。503 (服務無法使用) 錯誤會造成相當頻繁的重試次數。如要暫時停止檢索作業,建議您提供 503 HTTP 結果碼。處理永久性伺服器錯誤的做法並未經過定義。

Google 專屬:如果我們能夠確認網站設定有誤,以致於針對網頁缺漏問題傳回 5xx 而非 404 結果碼,我們會將該網站傳回的 5xx 錯誤視為 404 來處理。

要求失敗或資料不完整 處理由於 DNS 或網路連線問題 (例如逾時、無效回應、重設/中斷的連線、HTTP 區塊化錯誤等) 而無法擷取的 robots.txt 檔案,這種做法並未經過定義。
快取 一般而言,robots.txt 要求的快取作業可達一天,但如果發生無法重新整理快取版本 (舉例來說逾時或 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 KB。

正式語法/定義

此為 Backus-Naur Form (BNF) 式說明,採用 RFC 822 定義用語 (「|」除外,這個符號是用於指定替代元素)。"" 用於標註引用的文字,括號 ( 和 ) 則用於將元素分組。選用元素會列於 [方括弧] 內。元素前方可能有 <n>* 標記,這表示該元素將重複 n 次或更多次;n 的預設值為 0。

robotstxt = *entries
entries = *( ( <1>*startgroupline
  *(groupmemberline | nongroupline | comment)
  | nongroupline
  | comment) )
startgroupline = [LWS] "user-agent" [LWS] ":" [LWS] agentvalue [comment] EOL
groupmemberline = [LWS] (
  pathmemberfield [LWS] ":" [LWS] pathvalue
  | othermemberfield [LWS] ":" [LWS] textvalue) [comment] EOL
nongroupline = [LWS] (
  urlnongroupfield [LWS] ":" [LWS] urlvalue
  | othernongroupfield [LWS] ":" [LWS] textvalue) [comment] EOL
comment = [LWS] "#" *anychar
agentvalue = textvalue

pathmemberfield = "disallow" | "allow"
othermemberfield = ()
urlnongroupfield = "sitemap"
othernongroupfield = ()

pathvalue = "/" path
urlvalue = absoluteURI
textvalue = *(valuechar | SP)
valuechar = <any UTF-8 character except ("#" CTL)>
anychar = <any UTF-8 character except CTL>
EOL = CR | LF | (CR LF)

「absoluteURI」、「CTL」、「CR」、「LF」、「LWS」的語法按照 RFC 1945 的定義使用。「path」的語法按照 RFC 1808 的定義使用。

記錄分組

記錄會按照 <field> 元素的類型,劃分為不同種類:

  • start-of-group
  • group-member
  • non-group

從某個 start-of-group 記錄開始,直到下一個 start-of-group 記錄為止,在此之間的所有 group-member 記錄都會視為同一組記錄。start-of-group 唯一的欄位元素是 user-agent。彼此接續出現的多行 start-of-group,會採用最後一行 start-of-group 之後的 group-member 記錄。任何沒有前置 start-of-group 記錄的 group-member 記錄都會遭到忽略。所有的 non-group 記錄均會視為有效記錄,不受所有群組影響。

本文會另外詳細說明有效的 <field> 元素,這些元素包括:

  • user-agent (start-of-group)
  • disallow (僅適用於 group-member 記錄)
  • allow (僅適用於 group-member 記錄)
  • sitemap (non-group 記錄)

所有其他的 <field> 元素可能會遭到忽略。

start-of-group 元素 user-agent 的用途是指明該群組適用的檢索器。對於某個特定的檢索器而言,只有一組記錄會生效。本文稍後會說明優先順序。

範例群組:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

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

這裡明確指定了三個不同的群組,一個為「a」、一個為「b」,以及一個包含了「e」和「f」的群組。每個群組都有其各自的 group-member 記錄。請注意,您可以選擇使用空白字元 (沒有內容的空行) 來改善可讀性。

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

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

範例

假設 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 檢索器和使用者代理程式字串

Group-member 記錄

本節中僅提及一般和 Google 專屬 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、Yahoo 和 Ask 可支援的路徑值「萬用字元」形式有限。這兩種網址格式分別如下:

  • * 代表 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 記錄

Sitemap

Google、Ask、Bing、Yahoo 均支援 Sitemap,相關定義請參閱 sitemaps.org 所提供的說明。

使用方式

sitemap: [absoluteURL]

[absoluteURL] 會指向 Sitemap、Sitemap 索引檔案或對等的網址。該網址所在的主機無需與 robots.txt 檔案相同。存在的 sitemap 項目可能不止一個。就如同 non-group-member 記錄,這些項目不會與任何特定的使用者代理程式建立關聯;如未遭到禁止,可能所有檢索器都會採用這些項目。

group-member 記錄的優先順序

在 group-member 層級,特別是對 allowdisallow 指令而言,如果參照的規則是以 [path] 長度為基準,那麼檢索條件最詳盡的規則,會優先於檢索條件較不詳盡 (較短) 的規則。如果規則含有萬用字元,其優先順序並未定義。

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

允許/p

禁止/

認定結果:允許

http://example.com/folder/page

允許/folder

禁止/folder

認定結果:允許

http://example.com/page.htm

允許/page

禁止/*.htm

認定結果:未定義

http://example.com/

允許/$

禁止/

認定結果:允許

http://example.com/page.htm

允許/$

禁止/

認定結果:禁止

傳送您對下列選項的寶貴意見...

這個網頁