網站中Robots.txt 完整使用指南
Robots.txt是一個小文本文件,位于網站的根目錄中。它告訴抓取工具是否要抓取網站的某些部分。該文件使用簡單的語法,以便爬蟲可以放置到位。
寫得好,你將在索引天堂。寫得不好,最終可能會從搜索引擎中隱藏整個網站,該文件沒有官方標準。但你可以使用robots.txt做更多的工作,而不是網站大綱,比如使用通配符,站點地圖鏈接,和“Allow”指令,所有主要搜索引擎都支持這些 擴展。
在一個完美的世界里,沒有人需要robots.txt。如果網站上的所有頁面都是供公眾使用的,那么理想情況下,應該允許搜索引擎抓取所有頁面。但我們并不是生活在一個完美的世界里。許多站點都有蜘蛛陷阱,規范URL問題以及需要遠離搜索引擎的非公共頁面,而Robots.txt用于使您的網站更接近完美。
Robots.txt如何工作
如果你已經熟悉了robots.txt的指令,但擔心你做錯了,請跳到常見錯誤部分。如果你是新手,請繼續閱讀 。
可以使用任何純文本編輯器制作robots.txt文件,但它必須位于站點的根目錄中,并且必須命名為“robots.txt”,您不能在子目錄中使用該文件。
如果域名是example.com,則robots.txt網址應為:
http://example.com/robots.txt
HTTP規范將“user-agent”定義為發送請求的東西(與接收請求的“服務器”相對)。嚴格來說,用戶代理可以是請求網頁的任何內容,包括搜索引擎抓取工具,Web瀏覽器或模糊的命令行 實用程序。
用戶代理指令
在robots.txt文件中,user-agent指令用于指定哪個爬網程序應遵守給定的規則集。該指令可以是通配符,用于指定規則適用于所有爬網程序:
User-agent: *
或者它可以是特定爬蟲的名稱:
User-agent:Googlebot
禁止指令
您應該通過一個或多個disallow 指令來遵循用戶代理行 :
User-agent:*
Disallow:/ junk-page
上面的示例將阻止路徑以“/ junk-page”開頭的所有URL :
http://example.com/junk-page
http://example.com/junk-page?usefulness=0
http://example.com/junk-page/whatever
它不會阻止任何路徑不以“/ junk-page”開頭的URL 。以下網址不會被 阻止:
http://example.com/subdir/junk-page
這里的關鍵是disallow是一個簡單的文本匹配。無論“Disallow:”之后出現什么都被視為一個簡單的字符串(除了*和$之外,我將在下面提到)。將此字符串與URL的路徑部分的開頭(從域之后的第一個斜杠到URL的末尾的所有內容)進行比較,該字符串也被視為簡單字符串。如果匹配,則會阻止該URL。如果他們不這樣做,那就 不是。
允許指令
Allow指令不是原始標準的一部分,但現在所有主要搜索引擎都支持它。
您可以使用此偽指令指定禁止規則的例外,例如,如果您有一個要阻止的子目錄,但希望抓取該子目錄中的一個頁面:
User-agent:*
Allow:/ nothing-good-in-here / except-this-one-page
Disallow:/ nothing-good-in-here /
此示例將阻止以下 URL:
http://example.com/nothing-good-in-here/
http://example.com/nothing-good-in-here/somepage
http://example.com/nothing-good-in-here/otherpage
http://example.com/nothing-good-in-here/?x=y
但它不會阻止以下任何一種情況:
http://example.com/nothing-good-in-here/except-this-one-page
http://example.com/nothing-good-in-here/except-this-one-page-because-i -said-so
http://example.com/nothing-good-in-here/except-this-one-page/that-is-really-a-directory
同樣,這是一個簡單的文本匹配。將“Allow:”之后的文本與URL的路徑部分的開頭進行比較。如果它們匹配,即使在通常阻止它的其他地方禁止該頁面,也將允許該頁面。
通配符
所有主要搜索引擎也支持通配符運算符。這允許您在路徑的一部分未知或可變時阻止頁面。對于 例如:
Disallow:/ users / * / settings
*(星號)表示“匹配任何文本。”上述指令將阻止以下所有 URL:
http://example.com/users/alice/settings
http://example.com/users/bob/settings
http://example.com/users/tinkerbell/settings
小心!以上還將阻止以下URL(可能不是您想要的):
http://example.com/users/alice/extra/directory/levels/settings
http://example.com/users/alice/search?q=/settings
字符串結束運算符
另一個有用的擴展是字符串結尾運算符:
Disallow:/ useless-page $
$表示URL必須在該點結束,該指令將阻止以下 URL:
http://example.com/useless-page
但它不會阻止 以下任何一種情況:
http://example.com/useless-pages-and-how-to-avoid-creating-them
http://example.com/useless-page/
http://example.com/useless-page?a=b
阻止一切
您可能希望使用robots.txt阻止所有暫存站點(稍后會詳細介紹)或鏡像站點。如果您有一個私人網站供少數知道如何找到它的人使用,那么您還希望阻止整個網站被抓取。
要阻止整個站點,請使用禁止后跟斜杠:
User-agent:*
Disallow:/
允許一切
當您計劃允許 所有內容時,我可以想到您可能選擇創建robots.txt文件的兩個原因:
作為占位符,要向在網站上工作的任何其他人明確表示您允許一切都是故意的。
防止對robots.txt的請求失敗,以顯示在請求日志中。
要允許整個站點,您可以使用空的禁令:
User-agent:*
Disallow:
或者,您可以將robots.txt文件留空,或者根本沒有。爬行者會抓取所有內容,除非你告訴他們不要 。
Sitemap 指令
雖然它是可選的,但許多robots.txt文件都包含一個sitemap 指令:
網站地圖:http://example.com/sitemap.xml
這指定了站點地圖文件的位置。站點地圖是一種特殊格式的文件,列出了您要抓取的所有網址。如果您的站點具有XML網站地圖,則最好包含此指令。
使用 Robots.txt的常見錯誤
我看到很多很多不正確的robots.txt用法。其中最嚴重的是嘗試使用該文件保密某些目錄或嘗試使用它來阻止惡意爬蟲。
濫用robots.txt的最嚴重后果是意外地將您的整個網站隱藏在抓取工具中。密切關注這些 事情。
當你去制作時忘記隱藏
所有暫存站點(尚未隱藏在密碼后面)都應該包含robots.txt文件,因為它們不適合公眾查看。但是當您的網站上線時,您會希望每個人都能看到它。不要忘記刪除或編輯此 文件。
否則,整個實時網站將從搜索結果中消失。
User-agent:*
Disallow:/
您可以在測試時檢查實時robots.txt文件,或進行設置,這樣您就不必記住這一額外步驟。使用摘要式身份驗證等簡單協議將登臺服務器置于密碼之后。然后,您可以為登臺服務器提供您打算在實際站點上部署的相同robots.txt文件。部署時,只需復制所有內容即可。
試圖阻止敵對爬蟲
我見過robots.txt文件試圖明確阻止已知的惡意抓取程序,如下所示:
User-agent:DataCha0s / 2.0
Disallow:/
User-agent:ExtractorPro
Disallow:/
User-agent:EmailSiphon
Disallow:/
User-agent:EmailWolf 1.00
Disallow:/
這就像在汽車儀表板上留下一張紙條說:“親愛的小偷:請不要偷這輛車。 謝謝!”
這毫無意義。這就像在汽車儀表板上留下一張紙條說:“親愛的小偷:請不要偷這輛車。 謝謝!”
Robots.txt完全是自愿的,像搜索引擎這樣的禮貌爬蟲會遵守它。敵意爬行器,如電子郵件收割機,不會。爬蟲沒有義務遵守robots.txt中的指南,但主要的選擇是這樣做的。
如果您正在嘗試阻止錯誤的抓取工具,請使用用戶代理阻止或IP阻止 。
試圖保持目錄的秘密
如果您要保留對公眾隱藏的文件或目錄,請不要將它們全部列在robots.txt中,如下所示:
User-agent:*
Disallow:/ secret-stuff /
Disallow:/compromising-photo.jpg
Disallow:/big-list-of-plaintext-passwords.csv
出于顯而易見的原因,這將弊大于利。它為敵對爬蟲提供了一種快速,簡便的方法來查找您不希望他們找到的文件 。
這就像在你的車上留下一張紙條上寫著:“親愛的小偷:請不要看著隱藏在這輛車的雜物箱中的標有’緊急現金’的黃色信封。 謝謝!”
保持目錄隱藏的唯一可靠方法是將其置于密碼之后。如果你絕對不能把它放在密碼后面,這里有三個創可貼解決方案。
1.基于目錄名稱的前幾個字符進行阻止。
如果目錄是“/ xyz-secret-stuff /”,則將其阻塞如下:
Disallow:/ xyz-
2.阻止機器人元標記
將以下內容添加到HTML代碼中:
<meta name =“robots”content =“noindex,nofollow”>
3.使用X-Robots-Tag標頭阻止。
將這樣的內容添加到目錄的.htaccess文件中:
標題集X-Robots-Tag“noindex,nofollow”
同樣,這些是創可貼解決方案,這些都不是實際安全的替代品。如果確實需要保密,那么它確實需要在密碼后面。
意外阻止不相關的頁面
假設您需要阻止該 頁面:
http://example.com/admin
還有 目錄中的所有內容:
http://example.com/admin/
顯而易見的方法是這樣做 :
Disallow:/ admin
這會阻止你想要的東西,但現在你也不小心阻止了關于寵物護理的文章頁面:
http://example.com/administer-medication-to-your-cat-the-easy-way.html
本文將與您實際嘗試 阻止的頁面一起從搜索結果中消失。
是的,這是一個人為的例子,但我已經看到這種事情發生在現實世界中。最糟糕的是,它通常會被忽視很長一段時間。
阻止/ admin和/ admin /而不阻塞任何其他內容的最安全方法是使用兩個單獨的行:
Disallow:/ admin $
Disallow:/ admin /
請記住,美元符號是一個字符串結尾的運算符,表示“URL必須在此處結束。”該指令將匹配/ admin但不匹配 /管理。
試圖將robots.txt放在子目錄中
假設您只能控制一個巨大網站的一個子目錄。
http://example.com/userpages/yourname/
如果您需要阻止某些頁面,可能會嘗試添加robots.txt文件,如下所示:
http://example.com/userpages/yourname/robots.txt
這不起作用,該文件將被忽略。您可以放置??robots.txt文件的唯一位置是站點根目錄。
如果您無權訪問站點根目錄,則無法使用robots.txt。一些替代選項是使用機器人元標記來阻止頁面。或者,如果您可以控制.htaccess文件(或等效文件),則還可以使用X-Robots-Tag標頭阻止頁面。
嘗試定位特定的子域
假設您有一個包含許多不同子域的站點:
http://example.com/
http://admin.example.com/
http://members.example.com/
http://blog.example.com/
http://store.example.com/
您可能想要創建單個robots.txt文件,然后嘗試阻止它的子域,如下所示:
http://example.com/robots.txt
User-agent:*
Disallow:admin.example.com
Disallow:members.example.com
這不起作用,無法在robots.txt文件中指定子域(或域)。給定的robots.txt文件僅適用于從中加載的子域 。
那么有沒有辦法阻止某些子域?是。要阻止某些子域而不阻止其他子域,您需要提供來自不同子域的不同robots.txt文件。
這些robots.txt文件會阻止所有內容:
http://admin.example.com/robots.txt
http://members.example.com/robots.txt
User-agent:*
Disallow:/
這些將允許一切:
http://example.com/
http://blog.example.com/
http://store.example.com/
User-agent:*
Disallow:
使用不一致的類型情況
路徑區分大小寫。
Disallow:/ acme /
不會阻止“/ Acme /”或 “/ ACME /”。
如果你需要全部阻止它們,你需要為每個禁用一行:
Disallow:/ acme /
Disallow:/ Acme /
Disallow:/ ACME /
忘記了用戶代理線
所述用戶代理線是使用robots.txt關鍵的。在任何允許或禁止之前,文件必須具有用戶代理行。如果整個文件看起來像這樣:
Disallow:/ this
Disallow:/ that
Disallow:/ what
實際上什么都不會被阻止,因為頂部沒有用戶代理行。該文件必須為:
User-agent:*
Disallow:/ this
Disallow:/ that
Disallow:/ whatever
其他用戶代理陷阱
使用不正確的用戶代理還存在其他缺陷。假設您有三個目錄需要為所有抓取工具阻止,還有一個頁面應該僅在Google上明確允許。顯而易見(但不正確)的方法可能是嘗試這樣的事情 :
User-agent:*
Disallow:/ admin /
Disallow:/ private /
Disallow:/ dontcrawl /
User-agent:Googlebot
Allow:/ dontcrawl / exception
此文件實際上允許Google抓取網站上的所有內容。Googlebot(以及大多數其他抓取工具)只會遵守更具體的用戶代理行下的規則,并會忽略所有其他規則。在此示例中,它將遵守“User-agent:Googlebot”下的規則,并將忽略“User-agent: *” 下的規則。
要實現此目標,您需要為每個用戶代理塊重復相同的禁止規則,如下所示:
User-agent:*
Disallow:/ admin /
Disallow:/ private /
Disallow:/ dontcrawl /
User-agent:Googlebot
Disallow:/ admin /
Disallow:/ private /
Disallow:/ dontcrawl /
Allow:/ dontcrawl / exception
忘記路徑中的主要斜線
假設您要阻止該 URL:
http://example.com/badpage
你有以下(不正確的)robots.txt 文件:
User-agent:*
Disallow:錯誤頁面
這根本不會阻止任何事情,路徑必須以斜杠開頭。如果沒有,它永遠不會匹配任何東西。阻止URL的正確方法 是:
User-agent:*
Disallow:/ badpage
使用 Robots.txt的提示
既然您知道如何不將敵對抓取工具發送到您的秘密內容或從搜索結果中消失您的網站,這里有一些提示可以幫助您改進robots.txt文件。做得好不會提高你的排名(這是戰略搜索引擎優化和內容的用途),但至少你會知道爬蟲正在找到你想要他們找到的東西。
競爭允許和不允許
allow指令用于指定disallow規則的例外。disallow規則阻塞整個目錄(例如),allow規則取消阻止該目錄中的某些URL。這提出了一個問題,如果給定的URL可以匹配兩個規則中的任何一個,爬蟲如何決定使用哪個?
并非所有抓取工具都以完全相同的方式處理競爭允許和禁止,但Google優先考慮路徑較長的規則(就字符數而言)。如果兩個路徑長度相同,則allow優先于disallow。例如,假設robots.txt文件 是:
User-agent:*
Allow:/ baddir / goodpage
Disallow:/ baddir /
路徑“/ baddir / goodpage”長度為16個字符,路徑“/ baddir /”長度僅為8個字符。在這種情況下,允許勝過 不允許。
將 允許以下URL :
http://example.com/baddir/goodpage
http://example.com/baddir/goodpagesarehardtofind
http://example.com/baddir/goodpage?x=y
以下內容將被 阻止:
http://example.com/baddir/
http://example.com/baddir/otherpage
現在考慮以下示例:
User-agent:*
Aloow:/某些
Disallow:/ *頁面
這些指令會阻止以下 URL嗎?
http://example.com/somepage
是。路徑“/ some”長度為5個字符,路徑“/ * page”長度為6個字符,因此disallow獲勝。允許被忽略,URL將被阻止。
阻止特定的查詢參數
假設您要阻止包含查詢參數“id”的所有URL,例如 :
http://example.com/somepage?id=123
http://example.com/somepage?a=b&id=123
你可能想做這樣的事情 :
Disallow:/ * id =
這將阻止您想要的URL,但也會阻止以 “id” 結尾的任何其他查詢參數:
http://example.com/users?userid=a0f3e8201b
http://example.com/auction?num=9172&bid=1935.00
那么如何在不阻止“用戶ID”或 “出價”的情況下阻止“id ”?
如果您知道“id”將始終是第一個參數,請使用問號,如下 所示:
Disallow:/ *?id =
該指令將阻止:
http://example.com/somepage?id=123
但它不會阻止:
http://example.com/somepage?a=b&id=123
如果您知道“id”永遠不會是第一個參數,請使用&符號,如下 所示:
Disallow:/ *&id =
該指令將阻止:
http://example.com/somepage?a=b&id=123
但它不會阻止:
http://example.com/somepage?id=123
最安全的方法是 兩者兼顧:
Disallow:/ *?id =
Disallow:/ *&id =
沒有可靠的方法來匹配兩條線。
阻止包含不安全字符的URL
假設您需要阻止包含不安全URL的字符的URL,可能發生這種情況的一種常見情況是服務器端模板代碼意外暴露給Web。對于 例如:
http://example.com/search?q=<% var_name%>
如果您嘗試像這樣阻止該URL,它將無法 工作:
User-agent:*
Disallow:/ search?q = <%var_name%>
如果您在Google的robots.txt測試工具(在Search Console中提供)中測試此指令,您會發現它不會阻止該網址。為什么?因為該指令實際上是根據 URL 檢查的:
http://example.com/search?q=%3C%%20var_name%20%%3E
所有Web 用戶代理(包括抓取工具)都會自動對任何不符合URL安全的字符進行URL編碼。這些字符包括:空格,小于或大于符號,單引號, 雙引號和非ASCII 字符。
阻止包含不安全字符的URL的正確方法是阻止轉義版本:
User-agent:*
Disallow:/ search?q =%3C %% 20var_name%20 %% 3E
獲取URL的轉義版本的最簡單方法是單擊瀏覽器中的鏈接,然后從地址 字段中復制并粘貼URL 。
如何匹配美元符號
假設您要阻止包含美元符號的所有網址,例如 :
http://example.com/store?price=$10
以下內容 不起作用:
Disallow:/ * $
該指令實際上會阻止站點上的所有內容。當在指令末尾使用時,美元符號表示“URL在此處結束。”因此,上面將阻止路徑以斜杠開頭的每個URL,后跟零個或多個字符,后跟URL的結尾。此規則適用于任何有效的URL。為了解決這個問題,訣竅是在美元符號后添加一個額外的星號,如下所示:
Disallow:/ * $ *
在這里,美元符號不再位于路徑的盡頭,因此它失去了它的特殊含義。該指令將匹配包含文字美元符號的任何URL。請注意,最終星號的唯一目的是防止美元符號成為最后一個 字符。
補充
有趣的事實:谷歌在進行語義搜索的過程中,通常會正確地解釋拼寫錯誤或格式錯誤的指令。例如,Google會在沒有投訴的情況下接受以下任何內容:
UserAgent:*
Disallow / this
Dissalow:/ that
這并不意味著你應該忽略指令的格式和拼寫,但如果你確實犯了錯誤,谷歌通常會讓你逃脫它。但是,其他爬蟲可能 不會。
人們經常在robots.txt文件中使用尾隨通配符。這是無害的,但它也沒用; 我認為這是糟糕的形式。
對于例如:
Disallow:/ somedir / *
與以下內容完全相同 :
Disallow:/ somedir /
當我看到這個時,我想,“這個人不明白robots.txt是如何工作的。”我看到它很多。
概要
請記住,robots.txt必須位于根目錄中,必須以用戶代理行開頭,不能阻止惡意爬蟲,也不應該用于保密目錄。使用此文件的許多困惑源于人們期望它比它更復雜的事實。
- 上一篇
搜索引擎倒在 Web3.0?利用區塊鏈的協議,用戶的數據將擁有高度確權
搜索市場很久沒有新鮮事了。2022 年 2 月 8 日,市場消息稱,抖音搜索與蘋果 Siri 達成合作,iPhone 用戶可以通過 Siri 語音指令直接搜索抖音里的視頻內容。據悉,這是 Siri 在全球范圍內首次與短視頻品類 App 合作此功能。
- 下一篇
外國服務器匯總 ,比較好的國外服務器有哪些
比較好的外國服務器有哪些?此問題沒有標準化答案,因為每個站點所有者都有一個服務必須響應的唯一要求列表。然而,在這個苛刻的過程開始時,草根SEO博客羅列了比較受歡迎的一些外國服務器。1.HostGator HostGator專門為超過