搜尋抓取

一個頁面被蜘蛛当成好几個地址:URL 归一化该處理的几件事

同一個頁面如果大小寫、末尾斜杠、參數顺序、www 與裸域等寫法都返回 200,搜尋蜘蛛會把它們当成多條獨立 URL 分別排队抓取。本文梳理常见的重复形態、站内统一與 301、canonical、Sitemap 的處理顺序,以及用抓取日誌驗證是否生效的方法。

搜尋抓取

一個頁面被蜘蛛当成好几個地址:URL 归一化该處理的几件事

同一個頁面,如果服務器對它的大小寫寫法、带不带末尾斜杠、參數顺序不同的几種形式都返回 200,那在搜尋蜘蛛眼里它們就是几個不同的 URL,會分別排队、分別抓取。這不是内容問题,而是地址管理問题,但它會實實在在影响抓取效率。

URL 里差一個字符就是另一個地址

判断两個地址是不是同一個頁面,蜘蛛看的是字符串,不會替你做业務层面的联想。只要协议、主机名、路径、參數有一處不同,就被视為新的 URL 送進抓取队列。如果這些地址都能正常打開,蜘蛛没有理由自己排除掉其中任何一個。

常见的几種重复形態

  • 大小寫不同:/Page 和 /page 在不少服務器上是两條路径,内容却完全一样。
  • 末尾斜杠:/topic 與 /topic/ 都返回 200,就會變成两條 URL。
  • 协议與主机名:http 與 https、带 www 與不带 www、带預設端口,都是不同地址。
  • 查询參數:參數顺序調換(?a=1&b=2 與 ?b=2&a=1)、會话 ID、来源跟踪參數,都會派生出新地址。
  • 頁面變体:移動版、打印版、AMP 版,以及排序、篩選之後的列表頁。

蜘蛛遇到這些地址會怎么做

它會各自建立一條记錄,分別抓取、分別判断。结果是抓取资源被摊薄到同一批内容上,日誌里同一篇文章出現十几條路径也很常见。指向這個頁面的外鏈權重會被分散到不同地址上,蜘蛛也會在其中挑一個作為規范版本,但這個選擇權並不在站長手里,它综合内鏈、Sitemap、canonical 和歷史信号判断,挑中的未必是你想要的那個。

可以按這個顺序處理

  1. 站内先统一。導航、列表頁、分頁、面包屑、分享按钮里輸出的連結,全部寫成規范形式。很多重复地址是站内自己生成的,先断掉這個源头。
  2. 服務器层做 301,把變体指向唯一地址,並且只跳一跳,不要 A 跳 B、B 再跳 C。
  3. 用 canonical 补充說明,但要清楚它是提示信号,不能替代前两步,也不该用它掩盖可以 301 的重复。
  4. Sitemap 只提交規范地址,不要把几種寫法都塞進去,否則等于主動告诉蜘蛛這些地址都值得抓。
  5. 不要用 robots.txt 屏蔽代替归一化。屏蔽只影响抓取,地址仍可能被索引,問题會變得更难解释。

參數類地址要單獨管

篩選、排序、跟踪參數是重复地址的主要来源。能讀參數但内容几乎不變的组合頁,最好在站内就不生成連結;必须存在的组合頁,則應明确哪些值得留下、哪些可以收敛。放任站内到處带參數,等于持續给蜘蛛提供新的抓取入口。

多出来的跳轉本身也在消耗時間

归一化没做好的站点,往往同时存在一長串重定向。每一跳都要重新建立請求、等待响應,蜘蛛花在跳轉上的時間是拿不回来的。如果前面還有 CDN 或负载均衡把不同主机名解析到不同节点,同一頁面的响應表現可能不一致,抓取节奏也會被拖慢。

怎么驗證是否生效

  • 按路径去重統計抓取日誌,看同一篇内容對應几條 URL,是否有變体仍在被抓。
  • 抽查 301 鏈長度,超過一跳的整理成直接跳轉。
  • 核對内鏈輸出、canonical、Sitemap 三處寫的地址是否完全一致。
  • 观察站内工具里的重复頁面报告,數量是否在下降。
归一化解决的是减少重复、把抓取资源腾出来给真正不同的頁面,它本身並不保證頁面被收錄或获得排名。