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 式的 robots.txt 檔案可使用匿名登入,透過 FTP 通訊協定存取。

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

注意:robots.txt 檔案的網址和其他網址一樣需區分大小寫。

返回頁首

有效 robots.txt 網址範例:

Robots.txt URL有效目標 無效目標備註
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/
子網域上的 robots.txt 僅對該子網域有效力。
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/ IDN 相當於 punycode 版本。請一併參閱 RFC 3492
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 代管) 如果 robots.txt 以 IP 位址為主機名稱,則只有在檢索做為主機名稱的該 IP 位址時才有效力。該 robot.txt 也不會自動對所有由該 IP 位址所代管的網站生效 (雖然在主機名稱共用的情況下可取得 robots.txt 檔案,造成該 robots.txt 檔案處於共用狀態)。
http://example.com:80/robots.txt http://example.com:80/
http://example.com/
http://example.com:81/ 標準通訊埠號碼 (http 為 80、https 為 443、ftp 為 21) 等同於其對應的預設主機名稱。請一併參閱 [通訊埠號碼]。
http://example.com:8181/robots.txt http://example.com:8181/ http://example.com/ 採用非標準通訊埠號碼的 robots.txt 檔案,僅能對透過這些通訊埠號碼提供的內容生效。

返回頁首

處理 HTTP 結果碼

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

  • 全部允許:可能會檢索所有內容。
  • 全部禁止:可能不會檢索任何內容。
  • 有條件允許:由 robots.txt 中的指令決定是否檢索特定內容。
2xx (成功)
發出成功訊息的 HTTP 結果碼造成「有條件允許」的檢索作業。
3xx (重新導向)
一般而言,在找出有效結果 (或識別出某個循環) 之前,我們會採用重新導向。我們採用的重新導向躍點數量有限 (以 HTTP/1.0 來說,RFC 1945 允許的躍點是 5 個),達到上限後便會停止,並且以 404 來處理。如果處理禁止網址的 robots.txt 重新導向,這種做法並未經過定義,我們也不鼓勵這種做法。如果針對以傳回 2xx (頁框、JavaScript 或中繼重新整理類型的重新導向) 的 HTML 內容為基礎的 robots.txt 檔案邏輯重新導向進行處理,這種做法並未經過定義,我們也不鼓勵這種做法。
4xx (用戶端錯誤)
Google 會以同樣的方式處理所有 4xx 錯誤,就是假設沒有任何有效的 robots.txt 檔案存在。這種做法會假設沒有任何重新導向。對檢索作業而言,即為「全部允許」。注意:這包括 401「未經授權」和 403「已禁止」HTTP 結果碼。
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> 元素有可能須區分大小寫,視 <field> 元素而定。

如果處理含簡單錯誤/錯字 (例如「useragent」而非「user-agent」) 的 <field> 元素,這種做法並未經過定義,部分使用者代理程式可能會將其解釋為正確的指令。

各檢索器可能會強制規定檔案大小上限。超過檔案大小上限的內容可能會遭到忽略。Google 目前強制規定的大小上限為 500kb。

返回頁首

正式語法/定義

這是巴科斯範式 (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 的定義使用。「路徑」的語法按照 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 紀錄。請注意,您可以選擇使用空白字元 (沒有內容的空行) 來改善可讀性。

      返回頁首

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

      對於某個特定的檢索器而言,只有一組紀錄會生效。檢索器必須決定正確的紀錄群組,方法是找出其使用者代理程式檢索條件最詳細且依然相符的群組。其他紀錄群組都會遭到檢索器忽略。使用者代理程式不會區分大小寫。所有不相符的文字都會遭到忽略 (舉例來說,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 新聞所檢索,因此只採用 Googlebot 新聞群組。
      Otherbot (網路)(群組 2) 
      Otherbot (新聞)(群組 2) 即使有項目適用於相關的檢索器,也只有在檢索條件相符的時候才會生效。

      請一併參閱 Google 檢索器和使用者代理程式字串

      返回頁首

      Group-member 紀錄

      本節中僅提及一般和 Google 專屬 group-member 紀錄類型。這些紀錄類型也稱為檢索器的「指令」。這些指令會以「directive: [path]」的形式來指定,其中 [path] 並非必要部分。根據預設,檢索指定的檢索器時並沒有任何限制。未含 [path] 的指令會遭到忽略。

      如果特別指定,在擷取網站的 robots.txt 檔案時 (使用同樣的通訊協定、通訊埠號碼、主機和網域名稱),[path] 值會視為與網站的根目錄相對。路徑值的開頭必須為「/」才能指定根目錄。如果找到的路徑並未以斜線起頭,可能會被假定為該路徑就是其位置。路徑有大小寫之分。詳情請參閱下方的「以路徑值為基準的網址比對」一節。

      禁止

      disallow 指令會指明不應由指定檢索器存取的路徑。如果沒有指定路徑,則這個指令會遭到忽略。

      使用方式

      disallow: [path]
      

      允許

      allow 指令會指明或許可由指定檢索器存取的路徑。如果沒有指定路徑,則這個指令會遭到忽略。

      使用方式

      allow: [path]
      

      返回頁首

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

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

      注意:在「AJAX 檢索」網址的檢索版本中,必須指定「AJAX 檢索」網址。請一併參閱我們提供的讓 AJAX 應用程式可供檢索相關文件。

      Google、Bing、Yahoo 和 Ask 可支援的路徑值「萬用字元」形式有限。這些形式包括:

      1. * 代表 0 或更多的任一有效字元例項
      2. $ 代表網址結束

      範例路徑比對

      [path]相符網址 不相符備註
      /任何有效的網址  比對根目錄以及所有層級較低的網址
      /*等同於 / 等同於 / 等同於「/」 -- 結尾的萬用字元會遭到忽略。
      /fish/fish
      /fish.html
      /fish/salmon.html
      /fishheads
      /fishheads/yummy.html
      /fish.php?id=anything
      /Fish.asp
      /catfish
      /?id=fish
      請注意比對時會區分大小寫。
      /fish*/fish
      /fish.html
      /fish/salmon.html
      /fishheads
      /fishheads/yummy.html
      /fish.php?id=anything
      /Fish.asp
      /catfish
      /?id=fish
      等同於「/fish」 -- 結尾的萬用字元遭到忽略。
      /fish//fish/
      /fish/?id=anything
      /fish/salmon.htm
      /fish
      /fish.html
      /Fish/Salmon.asp
      結尾的斜線代表比對這個資料夾中的所有項目。
      fish/等同於 /fish/ 等同於 /fish/ 等同於 /fish/
      /*.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 /$ /禁止 

      返回頁首

       

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

這個網頁