搜尋抓取

抓取入口的层級分工:首頁、栏目頁與詳情頁各承担什么角色

蜘蛛從哪個頁面進来、沿着哪些連結往下走,很大程度上决定了它能發現多少 URL。本文拆解首頁、栏目頁、詳情頁在抓取路径中的分工,以及内鏈、Sitemap 與服務器响應稳定之間的配合關系,並给出一份可执行的检查顺序。

搜尋抓取

抓取入口的层級分工:首頁、栏目頁與詳情頁各承担什么角色

蜘蛛進入一個站点,通常不是随机游走。它從一個入口頁開始,沿着頁面里的連結一层层往下,能走到哪里、走多深,取决于站点的入口层級怎么安排。入口层級混乱时,常见的结果是:首頁和少數几個頁面被反复抓取,大量詳情頁長期没有抓取记錄。

入口层級的三個角色

把站内頁面粗略分成三层:首頁、栏目頁(列表頁、聚合頁)、詳情頁。這三层在抓取路径里承担的任務並不一样,混着做容易出現“该被發現的没被發現”。

首頁:负责分發,不负责堆放

首頁被訪問频率最高,它的主要作用是把蜘蛛送到下一层。如果首頁堆了几百條連結,其中大半是促销、活動、無關推荐,蜘蛛的注意力會被分散,真正需要被抓取的栏目入口反而被挤到後面。保留稳定的主導航、少量重要的栏目入口即可。

栏目頁:蜘蛛的中轉站

栏目頁是詳情頁 URL 的主要来源。它需要满足两個條件:一是能從首頁通過静態連結点到;二是列表本身可被抓取,不依赖滚動、点击“加载更多”才出現。分頁連結也属于這一层,第一頁之後的分頁如果只能用 JavaScript 触發,深层内容基本就断在這里。

詳情頁:终点,也是新的起点

詳情頁是抓取目标,同时也是通往其他詳情頁的节点。相關推荐、上一篇/下一篇、同标簽聚合,都能让蜘蛛在詳情层内部横向移動。這類連結要控制數量,一頁放十几條相關連結通常足够,塞進几十條效果反而下降,因為重要連結被稀释。

内鏈要“能走通”,而不是“看起来很多”

  • 每個栏目頁至少有一條從首頁可点击到達的静態路径,不要只靠站内搜尋框。
  • 列表分頁保留可抓取的連結,第一頁、第二頁、末頁都要能点到。
  • 避免孤岛頁:新上线的詳情頁如果没有進入任何列表和相關推荐,只能等 Sitemap 提醒。
  • 全站導航的連結數量保持克制,几百條連結的導航對蜘蛛和用戶都不友好。
  • 連結文字尽量描述目标頁面内容,不要清一色“点击這里”。

Sitemap 和内鏈是两條腿,別互相打架

内鏈决定蜘蛛日常沿着哪些路径走,Sitemap 更像一份补充清單,用来提示那些路径較深、更新频繁或新产生的 URL。两者给出的地址應当一致:如果内鏈指向带參數的版本,Sitemap 寫的是静態化版本,蜘蛛面對的是同一内容的两個地址,抓取會被分散。發現這種不一致时,先统一地址,再考虑用 canonical 收敛。

服務器不稳定,再顺的路径也走不通

抓取路径的设計再好,前提是蜘蛛每次請求都能拿到正常响應。持續的高响應時間會让蜘蛛在單位時間内走得更少,超时和连接中断則直接中断這條路径。5xx 出現频繁时,蜘蛛通常會降低抓取频率,恢复需要時間;429 表示請求過多,應当按照對方给出的 Retry-After 調整节奏,而不是繼續加压。

判断問题出在路径還是服務器,可以分两步:先看服務器日誌里响應碼和响應時間的分布,再看被請求的 URL 是否集中在列表頁和分頁。两者交叉看,方向通常就清楚了。

一個可执行的检查顺序

  1. 從首頁出發,手動点出一條到最深层詳情頁的路径,记錄需要点击几次。
  2. 检查栏目頁分頁是否可抓取,末頁是否可達。
  3. 核對 Sitemap 中的 URL 與内鏈實际指向是否一致。
  4. 看服務器日誌的响應碼與响應時間,確認没有被超时和 5xx 大面积打断。
  5. 找出最近更新但長期没有抓取记錄的頁面,看它們是否缺少入口。

抓取這件事很少靠單点技巧解决。入口给對、路径通畅、响應稳定,這三件事做好了,蜘蛛能覆盖的范围自然會往合理的方向走。