robots txt怎么寫
robots.txt簡介
robots.txt 文件應位于您網站的根目錄下。也就是說,如果您的網站是 www.example.com,則 robots.txt 文件的路徑應為 www.example.com/robots.txt。robots.txt 是一種遵照漫游器排除標準創建的純文本文件,由一條或多條規則組成。每條規則可禁止(或允許)特定抓取工具抓取相應網站中的指定文件路徑。
下面是一個包含兩條規則的簡單 robots.txt 文件,具體解析請見下文:
# Group 1
User-agent: Googlebot
Disallow: /nogooglebot/
# Group 2
User-agent: *
Allow: /
Sitemap: http://www.example.com/sitemap.xml
解析:
- 名為“Googlebot”抓取工具的用戶代理不應抓取
http://example.com/nogooglebot/
文件夾或任何子目錄。 - 所有其他用戶代理均可訪問整個網站。(不指定這條規則也無妨,結果是一樣的,因為完全訪問權限是系統默認的前提。)
- 網站的站點地圖文件位于 http://www.example.com/sitemap.xml。
我們稍后會提供一個更詳細的示例。
1. 基本的 robots.txt 準則
以下是與 robots.txt 文件有關的基本準則。我們建議您閱讀 robots.txt 文件的完整語法,因為 robots.txt 語法中有一些您需要了解的細微行為。
格式和位置
您幾乎可以使用任意文本編輯器創建 robots.txt 文件。您所用的文本編輯器應能夠創建標準 UTF-8 文本文件;請勿使用文字處理軟件,因為此類軟件通常會將文件保存為專有格式,且可能會向文件中添加非預期的字符(如彎引號),而這可能會導致抓取工具無法順利讀取 robots.txt 文件。
使用 robots.txt 測試工具為您的網站編寫或修改 robots.txt 文件。借助此工具,您可以測試自己網站的語法和行為。
格式和位置規則:
- 文件必須命名為 robots.txt。
- 您的網站只能有 1 個 robots.txt 文件。
- robots.txt 文件必須位于要應用到的網站主機的根目錄下。例如,要控制對
http://www.example.com/
下所有網址的抓取,就必須將 robots.txt 文件放在http://www.example.com/robots.txt
下,而不能將其放在子目錄(例如http://example.com/pages/robots.txt
)下。如果您不確定如何訪問自己的網站根目錄,或者需要相應權限才能進行訪問,請與網站托管服務提供商聯系。如果您無法訪問自己的網站根目錄,請改用其他屏蔽方法(例如元標記)。 - robots.txt 文件可應用到子網域(例如
http://website.example.com/robots.txt
)或非標準端口(例如http://example.com:8181/robots.txt
)。 - 備注是指 # 標記后的所有內容。
語法
- robots.txt 必須是 UTF-8 編碼的文本文件(包括 ASCII)。不能使用其他字符集。
- robots.txt 文件包含一個或多個組。
- 每個組由多條規則或指令(命令)組成,每條指令各占一行。
- 每個組包含以下信息:
- 組的適用對象(用戶代理)
- 代理可以訪問哪些目錄或文件,和/或
- 代理無法訪問哪些目錄或文件。
- 系統會按照從上到下的順序處理這些組,而且一個用戶代理只能匹配 1 個規則集(即與相應用戶代理匹配的首條最具體的規則)。
- 系統的默認假設是:用戶代理可以抓取所有未被
Disallow:
規則禁止訪問的網頁或目錄。 - 規則區分大小寫。例如,
Disallow: /file.asp
適用于http://www.example.com/file.asp
,但不適用于http://www.example.com/FILE.asp
。
robots.txt 文件中可以使用下列指令:
User-agent
:[必需,每個組需含一個或多個 User-agent 條目] 此規則的適用搜索引擎漫游器(即網頁抓取工具軟件)的名稱。這是每條規則的首行內容。Web Robots Database 或 Google 用戶代理列表中列出了大多數 Google 用戶代理名稱。支持使用星號 (*) 通配符表示路徑前綴、后綴或整個字符串。如下例中那樣使用星號 (*
) 可匹配除各種 AdsBot 抓取工具之外(此類抓取工具必須明確指定)的所有抓取工具。(查看 Google 抓取工具名稱列表。)示例:# 示例 1:僅屏蔽 Googlebot
User-agent: Googlebot
Disallow: /
# 示例 2:屏蔽 Googlebot 和 Adsbot
User-agent: Googlebot
User-agent: AdsBot-Google
Disallow: /
# 示例 3:屏蔽除 AdsBot 抓取工具之外的所有抓取工具
User-agent: *
Disallow: /Disallow
:[每條規則需含至少一個或多個 Disallow 或 Allow 條目] 用戶代理不應抓取的目錄或網頁(相對于根網域而言)。如果要指定網頁,應提供瀏覽器中顯示的完整網頁名稱;如果要指定目錄,則應以標記“/”結尾。支持使用通配符“*”表示路徑前綴、后綴或整個字符串。Allow
:[每條規則需含至少一個或多個 Disallow 或 Allow 條目] 上文中提到的用戶代理應抓取的目錄或網頁(相對于根網域而言)。此指令用于替換 Disallow 指令,從而允許抓取已禁止訪問的目錄中的子目錄或網頁。如果要指定網頁,就應提供瀏覽器中顯示的完整網頁名稱;如果要指定目錄,則應以標記“/”結尾。支持使用通配符“*”表示路徑前綴、后綴或整個字符串。Sitemap
:[可選,每個文件可含零個或多個 Sitemap 條目] 相應網站的站點地圖的位置。必須是完全限定的網址;Google 不會假定存在或檢查是否存在 http/httpswww.non-www 網址變體。站點地圖是一種用于指示 Google 應抓取哪些內容(而不是可以或無法抓取哪些內容)的好方法。詳細了解站點地圖。 示例:Sitemap: https://example.com/sitemap.xml
Sitemap: http://www.example.com/sitemap.xml
其他規則會被忽略。
再看一個示例文件
robots.txt 文件包含一個或多個組,其中每個組都以 User-agent
行(指定相應組適用的目標)開頭。下面是一個包含兩個組的文件;內嵌的備注分別對每個組進行了解析:
# Block googlebot from example.com/directory1/... and example.com/directory2/...
# but allow access to directory2/subdirectory1/...
# All other directories on the site are allowed by default.
User-agent: googlebot
Disallow: /directory1/
Disallow: /directory2/
Allow: /directory2/subdirectory1/
# Block the entire site from anothercrawler.
User-agent: anothercrawler
Disallow: /
2. 實用的 robots.txt 規則
下面是一些常見的實用 robots.txt 規則:
規則 | 示例 |
---|---|
禁止抓取整個網站。 請注意,在某些情況下,Google 即使未抓取網站的網址,仍可能會將其編入索引。注意:這不適用于各種 AdsBot 抓取工具,此類抓取工具必須明確指定。 | User-agent: * Disallow: / |
禁止抓取某一目錄及其內容(在目錄名后面添加一道正斜線)。請注意,若想禁止訪問私密內容,則不應使用 robots.txt,而應改用適當的身份驗證機制。對于 robots.txt 文件所禁止抓取的網址,Google 仍可能會在不進行抓取的情況下將其編入索引;另外,由于 robots.txt 文件可供任何人隨意查看,因此可能會泄露您的私密內容的位置。 | User-agent: * Disallow: /calendar/ Disallow: /junk/ |
僅允許使用某一抓取工具 | User-agent: Googlebot-news Allow: / User-agent: * Disallow: / |
允許使用除某一抓取工具以外的其他所有抓取工具 | User-agent: Unnecessarybot Disallow: / User-agent: * Allow: / |
禁止抓取某一網頁(在正斜線后面列出網頁): | User-agent: * Disallow: /private_file.html |
禁止 Google 圖片訪問某一特定圖片: | User-agent: Googlebot-Image Disallow: /images/dogs.jpg |
禁止 Google 圖片訪問您網站上的所有圖片: | User-agent: Googlebot-Image Disallow: / |
禁止抓取某一特定類型的文件(例如 .gif ): | User-agent: Googlebot Disallow: /*.gif$ |
禁止抓取整個網站,但允許在這些網頁上顯示 AdSense 廣告(禁止使用除 Mediapartners-Google 以外的所有網頁抓取工具)。這種方法會阻止您的網頁顯示在搜索結果中,但 Mediapartners-Google 網頁抓取工具仍能分析這些網頁,以確定要向您網站上的訪問者顯示哪些廣告。 | User-agent: * Disallow: / User-agent: Mediapartners-Google Allow: / |
匹配以某一特定字符串結尾的網址 – 需使用美元符號 ($ )。例如,示例代碼會禁止訪問以 .xls 結尾的所有網址: | User-agent: Googlebot Disallow: /*.xls$ |
摘要
本文檔詳細介紹了 Google 處理 robots.txt 文件的方式,這種文件讓您可以控制 Google 的網站抓取工具如何抓取可公開訪問的網站并將其編入索引。
3. 文件位置和有效范圍
robots.txt 文件必須位于主機的頂級目錄中,可通過適當的協議和端口號進行訪問。robots.txt 的通用協議都是基于 URI 的協議,而專用于 Google 搜索(例如,用于抓取網站)的協議為“http”和“https”。按照 http 和 https 協議,使用 HTTP 無條件 GET 請求來抓取 robots.txt 文件。
Google 專用:Google 同樣接受和遵循 FTP 網站的 robots.txt 文件。基于 FTP 的 robots.txt 文件可在匿名登錄的情況下通過 FTP 協議訪問。
robots.txt 文件中列出的指令僅適用于該文件所在的主機、協議和端口號。和其他網址一樣,robots.txt 文件的網址也區分大小寫。
4. 有效 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/子網域上的 robots.txt 僅對該子網域有效。 |
http://example.com/folder/robots.txt | robots.txt 文件無效。抓取工具不會檢查子目錄中是否包含robots.txt 文件。 |
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 上)以 IP 地址作為主機名的 robots.txt 僅在抓取作為主機名的該 IP 地址時有效。此類 robots.txt 并不會自動對該 IP 地址上托管的所有網站有效,但該文件可能是共享的,在此情況下,該文件也可以在共享主機名下使用。 |
http://example.com:80/robots.txt | 適用于:· http://example.com:80/· http://example.com/不適用于:http://example.com:81/標準端口號(http 為 80;https 為 443;ftp 為 21)等同于其默認的主機名。另請參閱 [portnumbers]。 |
http://example.com:8181/robots.txt | 適用于:http://example.com:8181/不適用于:http://example.com/非標準端口號上的 robots.txt 文件僅對通過這些端口號提供的內容有效。 |
5. 處理 HTTP 結果代碼
一般情況下,robots.txt 文件會出現三種不同的抓取結果:
- 全部允許:所有內容均可抓取。
- 全部禁止:所有內容均不能抓取。
- 有條件地允許:robots.txt 中的指令決定是否可以抓取某些內容。
6. 文件格式
文件應該是用 UTF-8 編碼的純文本格式,其中包含由 CR、CR/LF 或 LF 分隔的多個行。
系統將只考慮有效的行,而忽略其他所有內容。例如,如果獲得的文檔為 HTML 網頁,系統只會考慮網頁中有效的文本行,而忽略其他內容,并且既不顯示警告也不報告錯誤。
如果因為使用某種字符編碼而引入了不屬于 UTF-8 子集的字符,則可能導致文件內容解析錯誤。
系統會忽略 robots.txt 文件開頭可選的 Unicode BOM(字節順序標記)。
每個有效行均由一個字段、一個冒號和一個值組成。空格是可選的(但建議使用空格以提高可讀性)。您可以使用“#”字符在文件中的任何位置添加注釋,系統會將所有位于注釋開頭和行結尾之間的內容視為注釋,并且忽略這部分內容。常見格式為 <field>:<value><#optional-comment>
。系統會忽略行開頭和結尾的空格。
<field>
元素不區分大小寫。<value> 元素可能會區分大小寫,具體取決于 <field> 元素。
我們不支持處理存在輕微錯誤或拼寫錯誤的 <field>
元素(例如,“user-agent”錯寫成了“useragent”)。
各抓取工具可能會單獨設定文件大小的上限,并忽略超過該上限的內容。Google 目前強制執行的文件大小上限為 500 KiB。要減小 robots.txt 文件的大小,請將會導致 robots.txt 文件過大的指令整合在一起。例如,將已排除的內容放在一個單獨的目錄中。
7. 正式語法/定義
以下是 RFC 5234 中所述的 Augmented Backus-Naur Form (ABNF) 說明
8. 行和規則分組
一個或多個用戶代理行,后跟一個或多個規則。如果出現另一個用戶代理行或到了文件末尾,即表示組結束。最后一個組可能沒有規則,這意味著它暗含的意思是允許所有內容。
示例組:
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”為一組
除最后一個組(組“h”)外,每個組都有自己的組成員行。最后一個組(組“h”)為空。注意:您可以選擇使用空格和空白行提高可讀性。
9. 用戶代理的優先順序
對于某個抓取工具而言,只有一個組是有效的。抓取工具必須查找最具體的匹配用戶代理,從而確定正確的行組。抓取工具會忽略其他所有組。用戶代理區分大小寫。所有非匹配文本都會被忽略(例如,googlebot/1.2
和 googlebot*
均等同于 googlebot
)。這與 robots.txt 文件中的組順序無關。
如果特定用戶代理有多個組,則這些組中適用于特定用戶代理的所有規則會合并在一起。
示例
以下面的 robots.txt 文件為例:
user-agent: googlebot-news
(group 1)
user-agent: *
(group 2)
user-agent: googlebot
(group 3)
以下為抓取工具選擇相關組的方法:
另請參閱 Google 的抓取工具和用戶代理字符串
10. 組成員規則
本部分僅說明標準的組成員規則。對于抓取工具,這些規則也稱為“指令”。這些指令以 directive: [path]
的形式指定,其中 [path]
可選。默認情況下,指定的抓取工具沒有抓取限制。沒有 [path]
的指令會被忽略。
如果指定了 [path]
值,該路徑值將被視作 robots.txt 文件抓取網站的根目錄的相對路徑(使用相同的協議、端口號、主機和域名)。路徑值必須以“/”開頭,表示根目錄。路徑區分大小寫。有關詳情,請參閱下面的“基于路徑值的網址匹配”部分。
disallow
disallow
指令指定相應抓取工具不能訪問的路徑。如果未指定路徑,該指令將被忽略。
用法:
disallow: [path]
allow
allow
指令指定相應抓取工具可以訪問的路徑。如果未指定路徑,該指令將被忽略。
用法:
allow: [path]
11. 基于路徑值的網址匹配
以路徑值為基礎,確定某項規則是否適用于網站上的特定網址。不使用通配符時,路徑可用于匹配網址的開頭(以及以相同路徑開頭的任何有效網址)。路徑中的非 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 |
12. Google 支持的非組成員行
Google、Bing 和其他主流搜索引擎支持 sitemap
(如 sitemaps.org 所定義)。
用法:
sitemap: [absoluteURL]
[absoluteURL]
指向站點地圖、站點地圖索引文件或等效網址。網址不需要與 robots.txt 文件位于同一主機上。 sitemap
條目可以有多個。作為非組成員行,它們不依賴于任何特定的用戶代理,只要未加禁止,所有抓取工具都可以追蹤它們。
組成員行的優先順序
在組成員一級,尤其是對于 allow
和 disallow
指令,最具體的規則優先級最高;根據 [path]
條目的長度,長度越短,越不具體。如果規則(包括使用通配符的規則)存在沖突,系統將使用限制性最弱的規則。
13. 測試 robots.txt 標記
Google 提供了兩種測試 robots.txt 標記的選項:
- Search Console 中的 robots.txt 測試工具。
- Google 的開源 robots.txt 庫(也用在 Google 搜索中)。
畫重點
- 文件命名必須為robots.txt,必須存放站網站服務器根目錄,且只可以有一個;
- 訪問網站robots文件返回4XX狀態碼時,會假定網站不存在有效的robots文件,Google則認為不存在任何限制,即表示抓取時,全部允許;
- robots文件在一般情況下最多會緩存24小時,即在修改robots文件后,谷歌會在24個小時內感知到這個變化;
- 對某個抓取工具而言,只有一個指令是有效的。與robots文件中代理(UA)限制與出現的順序無關,區分大小寫,會忽略非匹配文本;
- allow和disallow指令的以最具體的規則優先級最高,而限制規則的字符長度越長,越具體。即
- allow: /w/
- disallow: /w/b/
- 含義為允許/w/目錄下除/w/b/之外的目錄被抓取;
- 特殊匹配$用于匹配以某些字符結尾的文件,例如:Disallow: .gif$,表示禁止抓取任何以以gif結尾的url;
- 特殊匹配*用于匹配任意0到多個字符,例如:Disallow: /w/*?dspm=,表示禁止抓取同時包含/w/和?dspm=的URL;
- robots文件中的指令區分大小寫;
- robots文件指令默認對Adsbot不生效,即:如果不設置任何有關Adsbot的限制指令,則默認Adsbot是可以抓取網站所有內容的。如果需要對Adsbot有限制,則需要專門針對User Agent: Adsbot設置單獨指令;
- robots文件屏蔽抓取并不能阻止網站內容被收錄且出現在搜索引擎結果中,如果在其他網站有被屏蔽抓取內容的鏈接,則該鏈接頁面仍然有可能被收錄且出現在搜索引擎結果中。