Robots.txt 文件的深入指南

已發表: 2020-08-10

robots.txt 是一個非常強大的文件,可以添加到您的網站,以幫助控制您的網站搜索引擎應該抓取哪些區域以及應該忽略哪些區域。 定期檢查您的 robots.txt 以確保它是最新的,並且如果可能的話,使用監控工具在發生更改時收到警報非常重要。

在 Semetrical,作為我們技術 SEO 服務產品的一部分,我們將在對客戶網站進行技術審核時審核客戶的 robots.txt 文件,以檢查應被阻止的路徑。 此外,如果 SEO 團隊在技術 SEO 審核過程中遇到問題(例如重複),則可能會編寫新的 robots.txt 規則並將其添加到文件中。

由於 robots.txt 是一個重要文件,我們整理了一份指南,涵蓋了它的最終含義、為什麼有人會使用它以及編寫規則時可能出現的常見陷阱。

什麼是機器人 txt 文件?

robots.txt 文件是爬蟲在訪問您的網站時的第一個調用端口。 它是一個文本文件,列出了針對不同用戶代理的指令,基本上告訴網絡爬蟲應該爬取網站的哪些部分,哪些部分應該被忽略。 robots.txt 文件中使用的主要指令由“允許”或“禁止”規則指定。

從歷史上看,“noindex”規則也可以使用,但在 2019 年,Google 停止支持 noindex 指令,因為它是一條未發布的規則。

如果文件使用不當,可能會損害您的網站,並可能導致流量和排名大幅下降。 例如,當整個網站被搜索引擎阻止或網站的某個部分被錯誤地阻止時,就會發生錯誤。 當這種情況發生時,連接到該網站部分的排名將逐漸下降,流量也會隨之下降。

您真的需要 robots.txt 文件嗎?

不,在您的網站上包含 robots.txt 不是強制性的,尤其是對於 URL 最少的小型網站,但強烈建議將其用於中型到大型網站。 在大型網站上,它可以更輕鬆地控製網站的哪些部分可以訪問,以及哪些部分應該被爬蟲阻止。 如果該文件不存在,您的網站通常會被正常抓取和索引。

robots txt文件主要用於什麼?

robots.txt 有很多用例,在 Semetrical,我們將其用於以下場景:

  • 阻止內部搜索結果,因為這些頁面通常對爬蟲沒有價值,並且可能導致整個網站的大量重複。
  • 如果某些方面從 SEO 角度來看沒有價值,但當用戶在您的網站上時仍然需要 UX,則阻止部分方面導航。
  • 阻止不同級別的分面導航,其中一個分面級別可能對搜索引擎有用,但當組合兩個不同的分面過濾器時,它們可能變得與搜索引擎抓取和索引無關。
  • 阻止導致重複或浪費爬網預算的參數。 這有點爭議,因為其他人可能會告訴您不要阻止 robots.txt 中的參數,但這已經在我們的許多需要參數但爬蟲不需要抓取它們的客戶網站上起作用。 強烈建議檢查您阻止的任何參數是否沒有有價值的鏈接或正在為任何有價值的關鍵字排名帶來流量。
  • 阻止網站的私人部分,例如結帳頁面和登錄部分。
  • 包括您的 XML 站點地圖位置,以便爬蟲輕鬆訪問您網站上的所有 URL。
  • 只允許特定的機器人訪問和抓取您的網站。
  • 阻止無法審核的用戶生成內容。

在哪裡放置機器人 txt 以及如何將其添加到您的網站?

robots.txt 文件需要放在您網站的根目錄下,例如,在 Semetrical 的網站上,它位於 www.semetrical.com/robots.txt 並且必須命名為 robots.txt。 一個網站只能有一個 robots.txt,並且它需要在一個包含 ASCII 的 UTF-8 編碼文本文件中。

如果您有 blog.example.com 等子域,則 robots.txt 可以位於子域的根目錄中,例如 blog.example.com/robots.txt。

robots.txt 文件是什麼樣的?

典型的 robots.txt 文件將由不同的組件和元素組成,其中包括:

  • 用戶代理
  • 不允許
  • 允許
  • 抓取延遲
  • 網站地圖
  • 評論(有時你可能會看到這個)

以下是 Semetrcals robots.txt 的示例,其中包括用戶代理、禁止規則和站點地圖。

 User-agent: * Disallow: /cgi-bin/ Disallow: /wp-admin/ Disallow: /comments/feed/ Disallow: /trackback/ Disallow: /index.php/ Disallow: /xmlrpc.php Disallow: /blog-documentation/ Disallow: /test/ Disallow: /hpcontent/ Sitemap: https://devsemetrical.wpengine.com/sitemap.xml

用戶代理

用戶代理定義了一組指令的開始。 它通常用通配符 (*) 表示,表示以下說明適用於訪問該網站的所有機器人。 這方面的一個例子是:

用戶代理: *

 User-agent: * Disallow: /cgi-bin/ Disallow: /wp-admin/

有時您可能想要阻止某些機器人或只允許某些機器人訪問某些頁面。 為此,您需要將機器人名稱指定為用戶代理。 這方面的一個例子是:

 User-agent: AdsBot-Google Disallow: /checkout/reserve Disallow: /resale/checkout/order Disallow: /checkout/reserve_search

需要注意的常見用戶代理包括:

還可以阻止特定軟件抓取您的網站或延遲它們可以抓取多少個 URL,因為每個工具都有自己的用戶代理來抓取您的網站。 例如,如果您想阻止 SEMRush 或 Ahrefs 抓取您的網站,則會將以下內容添加到您的文件中:

 User-agent: SemrushBot Disallow: * User-agent: AhrefsBot Disallow: *

如果您想延遲抓取的 URL 數量,則會將以下規則添加到您的文件中:

 User-agent: AhrefsBot Crawl-Delay: [value] User-agent: SemrushBot Crawl-Delay: [value]

禁止指令

disallow 指令是用戶可以放入 robots.txt 文件中的規則,它將告訴搜索引擎不要根據創建的規則抓取特定路徑或 URL 集。 文件中可能有一行或多行禁止規則,因為您可能希望阻止網站的多個部分。

如果 disallow 指令為空且未指定任何內容,則機器人可以抓取整個網站,因此為了阻止某些路徑或您的整個網站,您需要指定 URL 前綴或正斜杠“/”。 例如,在下面的示例中,我們將阻止任何在 /cgi-bin/ 或 /wp-admin/ 路徑之外運行的 URL。

 User-agent: * Disallow: /cgi-bin/ Disallow: /wp-admin/

如果您想阻止整個網站免受 Google 等機器人的攻擊,那麼您需要添加一個禁止指令,後跟一個正斜杠。 通常,當您不希望暫存網站被發現或編入索引時,您可能只需要在暫存環境中執行此操作。 一個示例如下所示:

 User-agent: * Disallow: /

允許指令

大多數搜索引擎都會遵守允許指令,它基本上會抵消禁止指令。 例如,如果您要阻止 /wp-admin/,它通常會阻止從該路徑運行的所有 URL,但是,如果 /wp-admin/admin-ajax.php 有允許規則,那麼機器人將抓取 / admin-ajax.php 但阻止任何其他從 /wp-admin/ 運行的路徑。 請參見下面的示例:

 User-agent: * Disallow: /wp-admin/ Allow: /wp-admin/admin-ajax.php

爬行延遲

抓取延遲指令有助於減慢機器人抓取您網站的速度。 並非所有搜索引擎都會遵循抓取延遲指令,因為它是非官方規則。

– 谷歌不會遵循這個指令

– 百度不會遵循這個指令

– Bing 和 Yahoo 支持抓取延遲指令,其中該規則指示機器人在抓取操作後等待“n”秒。

– Yandex 還支持抓取延遲指令,但對規則的解釋略有不同,它只會在每“n”秒內訪問您的網站一次。

下面是一個抓取延遲指令的示例:

 User-agent: BingBot Disallow: /wp-admin/ Crawl-delay: 5

站點地圖指令

sitemap 指令可以告訴搜索引擎在哪裡可以找到您的 XML 站點地圖,並且它可以讓不同的搜索引擎輕鬆找到您網站上的 URL。 將遵循該指令的主要搜索引擎包括 Google、Bing、Yandex 和 Yahoo。

建議將站點地圖指令放在 robots.txt 文件的底部。 下面是一個例子:

 User-agent: * Disallow: /cgi-bin/ Disallow: /wp-admin/ Disallow: /comments/feed/ Sitemap: https://devsemetrical.wpengine.com/sitemap.xml

註釋

robots.txt 文件可以包含評論,但評論的存在僅適用於人類而不是機器人,因為主題標籤之後的任何內容都將被忽略。 由於多種原因,評論可能很有用,其中包括:

– 提供存在某些規則的原因

– 添加規則的參考資料

– 引用規則適用於站點的哪些部分

– 解釋規則在做什麼

– 下面顯示了不同 robots.txt 文件中的註釋示例:

 #Student Disallow: /student/*-bed-flats-* Disallow: /student/*-bed-houses* Disallow: /comments/feed/ #Added by Semetrical Disallow: /jobs*/full-time/* Disallow: /jobs*/permanent/* #International Disallow: */company/fr/* Disallow: */company/de/*

規則的順序重要嗎?

規則的順序並不重要,但是當多個允許和禁止規則應用於 URL 時,最長匹配路徑規則是應用的並且優先於不太具體的較短規則的規則。 如果兩條路徑的長度相同,則將使用限制較少的規則。 如果您需要允許或禁止特定的 URL 路徑,您可以通過使用“*”使字符串變長來使規則變長。 例如,不允許:********/make-longer

在谷歌自己的網站上,他們列出了一組示例情況,顯示優先規則。 下表來自谷歌。

如何檢查您的 robots.txt 文件?

在推送它之前檢查和驗證您的 robots.txt 文件始終很重要,因為不正確的規則會對您的網站產生很大影響。

最好的測試方法是使用 Search Console 中的 robots.txt 測試工具並測試應使用現有規則阻止的不同網址。 這也是測試要添加到文件中的任何新規則的好方法。

在 robots.txt 中使用正則表達式的示例

在 robots.txt 文件中創建規則時,您可以使用模式匹配在一個禁止規則中阻止一系列 URL。 正則表達式可用於進行模式匹配,谷歌和必應遵守的兩個主要字符包括:

  • 與 URL 結尾匹配的美元符號 ($)
  • 星號 (*) 是表示任何字符序列的通配符規則。

Semetrical 的模式匹配示例:

 Disallow: */searchjobs/*

這將阻止任何包含 /searchjobs/ 路徑的 URL,例如:www.example.com/searchjobs/construction。 這是客戶所需要的,因為需要阻止他們網站的搜索部分,以便搜索引擎不會抓取和索引網站的該部分。

 Disallow: /jobs*/full-time/*

這將阻止在 /jobs/ 後跟 /full-time/ 之後包含路徑的 URL,例如

www.example.com/jobs/admin-secretarial-and-pa/full-time/

. 在這種情況下,我們需要全職作為 UX 的過濾器,但對於搜索引擎,不需要索引頁面來滿足“職位”+“全職”的需求。

 Disallow: /jobs*/*-000-*-999/*

這將阻止包含工資過濾器的 URL,例如

www.example.com/jobs/city-of-bristol/-50-000-59-999/

. 在這種情況下,我們需要工資過濾器,但不需要搜索引擎來抓取工資頁面並對其進行索引。

 Disallow: /jobs/*/*/flexible-hours/

這將阻止包含靈活工作時間並在其間包含兩個方面路徑的 URL。 在這種情況下,我們通過關鍵詞研究發現,用戶可能會搜索位置+彈性時間或工作+彈性時間,但用戶不會搜索“職位”+“位置”+“彈性時間”。 示例 URL 如下所示

www.example.com/jobs/admin-secretarial-and-pa/united-kingdom/flexible-hours/

.

 Disallow: */company/*/*/*/people$

這將阻止包含公司和人員之間的三個路徑以及以人員結尾的 URL 的 URL。 一個例子是

www.example.com/company/gb/04905417/company-check-ltd/people

.

 Disallow: *?CostLowerAsNumber=*

此規則將阻止訂購定價的參數過濾器。

 Disallow: *?Radius=* Disallow: *?radius=*

這兩條規則阻止機器人爬取改變用戶搜索半徑的參數 URL。 由於站點包含兩個版本,因此添加了大寫和小寫規則。

robots.txt 的注意事項

  • robots.txt 區分大小寫,因此您需要在規則中使用正確的大小寫,例如,/hello/ 將與 /Hello/ 區別對待。
  • 要讓 Google 等搜索引擎更快地重新緩存您的 robots.txt 以找到新規則,您可以在 Search Console 中檢查 robots.txt 網址並請求編入索引。
  • 如果您的網站依賴於包含許多規則的 robots.txt,並且您的 robots.txt 網址長時間提供 4xx 狀態代碼,則這些規則將被忽略,被阻止的頁面將變為可索引。 確保它始終提供 200 狀態代碼非常重要。
  • 如果您的網站已關閉,請確保 robots.txt 返回 5xx 狀態代碼,因為搜索引擎會了解該網站已關閉以進行維護,並且他們將在稍後再次回來抓取該網站。
  • 當 URL 已編入索引並且隨後將禁止添加到您的網站以從索引中刪除這些 URL 時,刪除和刪除這些 URL 可能需要一些時間。 此外,URL 仍可以在索引中保留一段時間,但元描述將顯示一條消息,例如“由於此站點的 robots.txt,此結果的描述不可用 - 了解更多”。
  • robots.txt 禁止規則並不總是保證頁面不會出現在搜索結果中,因為 Google 可能仍會根據外部因素(例如傳入鏈接)決定該頁面是相關的並且應該被編入索引。
  • 如果您有一個禁止規則並且在頁面的源代碼中放置了“無索引”標籤,則“無索引”將被忽略,因為搜索引擎無法訪問該頁面以發現“無索引”標籤。
  • 索引頁面上的禁止規則,特別是那些帶有傳入鏈接的頁面,意味著您將失去那些反向鏈接的鏈接資產,否則這些反向鏈接將被傳遞以使其他頁面受益。 這就是為什麼在添加禁止規則之前檢查頁面是否有反向鏈接很重要的原因。
  • 如果在編寫允許或禁止規則時路徑中缺少前導斜杠,則該規則將被忽略。 例如,“禁止:搜索工作。

如果您想與 Semetrical 的一位技術 SEO 專家交談,請訪問我們的技術 SEO 服務頁面以獲取更多信息。