為什么入口頁的 URL 形態值得單獨處理
蜘蛛池里,入口頁通常批量生成、批量上线。很多人把注意力放在内容差异和連結關系上,却忽略了一個更基础的問题:同一個入口頁,蜘蛛可能看到好几個地址。例如 .../page 與 .../page/、.../Page、.../page?from=abc,如果服務器都返回 200,蜘蛛很容易把它們当成獨立 URL。结果就是抓取预算被拆散,日誌里多出一批重复請求,後續判断頁面质量时也會受到干扰。
入口頁常见的几種 URL 分叉
- 大小寫:路径里的字母大小寫不同,服務器若不做统一跳轉,可能返回两個 200。
- 结尾斜杠:目錄带不带结尾斜杠,很多程序會同时可訪問。
- 协议與主机名:http 與 https、带 www 與不带 www,如果都解析到同一站点,需要明确一個規范版本。
- 查询參數:追踪參數、排序參數、分頁參數、會话 ID 等,最容易批量制造重复地址。
- 路径细节:重复斜杠、URL 编碼差异、預設端口号,也可能产生不同寫法。
參數是入口頁里最容易失控的一類
入口頁為了批量生成,有时會带上參數,比如按模板 ID、地区、頁碼来区分。這類地址不是不能用,但要分清两類參數:一類是决定頁面内容的,比如分頁參數;另一類是只用于来源追踪的,比如 utm 系列。後者對蜘蛛没有意义,却會让同一頁面出現大量變体。比較稳妥的做法是:追踪參數不寫進入口頁的正式地址,或在服務器端做 301 跳轉到不带追踪參數的版本。分頁參數則可以保留,但要在頁面里给出清晰的上一頁、下一頁關系,避免蜘蛛在參數组合里绕圈。
统一 URL 的检查顺序
- 先列出入口頁批量生成时可能产生的地址寫法,标出哪些是規范版本。
- 检查服務器是否把非規范版本 301 到規范版本,而不是全部 200 返回。
- 检查頁面里的内部連結、sitemap、提交给搜尋平台的地址,是否都指向同一個規范版本。
- 日誌里抽样看爬虫實际抓了哪些變体,重点看带參數的請求和大小寫不同的請求。
- 對确實無意义的參數,可以考虑在服務器层跳轉合並,而不是简單用 robots.txt 屏蔽。屏蔽只能阻止抓取,不能解决重复地址在索引层面的問题。
canonical 能用,但別把它当成唯一手段
canonical 标簽可以告诉搜尋引擎哪個地址是首選版本,但它是一種提示,不是强制指令。如果站内連結、重定向和 sitemap 各自指向不同版本,canonical 的效果會被削弱。更稳的组合是:服務器 301 為主,站内連結和 sitemap 保持一致,canonical 作為补充。對于入口頁這種數量多、更新快的頁面,從生成規則上就统一 URL 形態,比上线後再补救省事得多。
入口頁的 URL 形態是蜘蛛認识這個頁面的第一层身份。地址越干净,後面判断内容、分配抓取配額的干扰就越少。
给站点运营的几條實用建议
- 批量生成入口頁时,先定一份 URL 規則:是否小寫、是否带结尾斜杠、是否允许查询參數。
- 入口頁尽量使用短而稳定的路径,不要把多個參數塞進正式地址。
- 同一批入口頁上线後,用日誌核對爬虫抓取的地址形態,發現分叉及时收敛。
- 如果目标頁與入口頁跨域,也要检查目标頁一侧是否存在類似的 URL 重复問题。
- 不要為了增加 URL 數量而故意制造參數變体,這通常只會增加维護成本和無效抓取。
URL 規范化不是一次性的工作。入口頁扩量、模板調整、服務器迁移时,都可能重新引入地址分叉。把 URL 形態检查放進上线流程,比等到日誌里出現大量重复請求再回头處理更轻松。