搜尋抓取

robots.txt 與抓取入口:Disallow、Sitemap 声明和誤封的核對方法

robots.txt 是搜尋蜘蛛進入站点前最先讀取的文件,它决定了哪些路径可以被抓取,也常用来声明 Sitemap 位置。本文梳理 User-agent 分组、Disallow 的匹配規則、通配符寫法與常见誤封场景,並给出 Sitemap 声明、狀態碼異常的核對清單,帮助站点把抓取入口维持在可用狀態。

搜尋抓取

robots.txt 與抓取入口:Disallow、Sitemap 声明和誤封的核對方法

很多站点把精力放在内容质量、内鏈和 Sitemap 上,却忽略了一件更靠前的事:搜尋蜘蛛在進入站点之前,通常會先讀取 robots.txt。這個文件决定了哪些路径可以被抓取,也常被用来声明 Sitemap 的位置。它一旦寫错,後面的 URL 發現、抓取和收錄都會受影响。

先弄清它能做什么、不能做什么

robots.txt 是一份“约定”,不是訪問控制。它不能阻止別人直接請求頁面,也不是收錄開關:允许抓取不等于會被收錄,禁止抓取也不等于一定不出現。理解這一点,才能避免把關鍵詞保護、隐私隐藏這類需求寄托在它身上。

  • 它影响的是抓取,而不是抓取之後的處理结果;
  • 它按路径生效,不区分頁面内容是否有價值;
  • 它需要放在域名根目錄下,子目錄里的同名文件通常不被讀取。

Disallow 的匹配規則要寫對

規則是按前缀匹配的,不是按目錄层級或文件名匹配。寫 /news 會同时挡住 /news、/news/1.html,也會挡住 /newsletter 這样的意外路径。想限定到目錄,應寫成 /news/。

  • 通配符 *:可代表任意字符,如 /*.pdf$;
  • 结尾符 $:限定精确结尾,不加时是前缀匹配;
  • User-agent 分组:不同爬虫可寫不同規則,组間要用空行分隔;
  • 注释:以 # 開头,行内注释是否生效各家實現並不一致,稳妥做法是單獨成行。

几種容易造成誤封的寫法

  1. 把測試环境的全站禁止規則带到线上,例如 Disallow: / 忘记刪除;
  2. 用 Disallow: /*? 一刀切參數頁,结果把带參數的分頁、篩選入口全部挡掉;
  3. 只禁目錄不寫斜杠,誤伤同前缀的其他路径;
  4. 想禁图片或 PDF,却顺手把整個静態资源目錄封住,影响頁面渲染;
  5. CDN 或反向代理缓存了舊版本文件,源站已改,线上還在生效。

Sitemap 声明的核對

在 robots.txt 里声明 Sitemap 是常见做法,需要注意几点:地址要寫完整的绝對 URL(含 https://),每行一條,放在文件的合适位置即可。声明只是提示,不是收錄保證,也不等同于把 URL 提交入库。如果站点同时用了站点地图索引,声明索引文件地址即可,不必逐條列出分片。

  • 確認声明的地址能直接打開,且返回正常狀態;
  • 確認 Sitemap 内 URL 與 robots.txt 的 Disallow 規則不冲突,否則會出現“声明了却抓不到”;
  • 換域名或加 www 後,记得同步更新声明里的地址。

狀態碼與响應细节

這個文件本身也會被請求,因此它的响應同样值得核對:

  • 返回 200 且内容可讀,是最基本的要求;
  • 返回 5xx 或超时,抓取方可能按“暂时不可用”處理,這段時間的規則是不确定的;
  • 返回 404 通常被理解為無限制,等于把全部路径敞開,這未必是你想要的;
  • 文件應保持精简(常见建议控制在几百 KB 以内),编碼统一使用 UTF-8。
把 robots.txt 当成一份長期维護的清單,而不是上线时寫一次就忘的配置文件。改版、換域名、加频道、上活動頁时,都值得回头看一眼。

一份可执行的核對清單

  1. 打開线上地址,確認返回 200,内容與源站一致,没有被缓存成舊版本;
  2. 逐條讀 Disallow,確認只挡住了确實不需要抓取的路径,尤其是分頁、詳情、列表入口;
  3. 用站長工具或抓取測試功能,驗證重点 URL 的“允许/禁止”判定结果;
  4. 確認 Sitemap 声明地址可訪問,且其内容與目前規則不冲突;
  5. 检查是否誤禁了 CSS、JS、图片等渲染依赖资源;
  6. 把這份检查加入改版和上线的固定流程,避免規則被覆盖或遗漏。

抓取入口的门槛往往不在技術难度,而在是否有人定期看一眼。規則寫對、狀態正常、声明清晰,剩下的 URL 發現與抓取才有讨论的基础。