翻服務器日誌时,常會看到同一篇文章被几個只差一两個字符的 URL 分別請求。這些地址返回的是同一份内容,但抓取工具不會自動把它們合並,每一次請求都要占用一次抓取机會。問题通常出在站内連結、Sitemap、跳轉規則三者的寫法没有對齐。
先把“等價”判断清楚
判断两個 URL 是否等價,不看它們看起来像不像,而看三件事:协议與主机名是否统一、路径是否只有一種寫法、查询參數是否稳定。只要其中一項存在多種寫法,並且都能返回 200,就會形成两條獨立的抓取记錄。
大小寫與主机名
多數服務器對路径区分大小寫,但部分 CDN 和框架不区分。如果站内既有 /Article/123 也有 /article/123,且两者都返回 200,两個地址都會被当成獨立入口。带 www 與不带 www、http 與 https 混用同理,需要用 301 收敛到一個版本。
尾斜杠與預設文件名
目錄地址後加不加斜杠、首頁寫成 / 還是 /index.html,這類差异最容易在内鏈里同时出現。導航里用带斜杠的寫法,正文里用不带斜杠的寫法,就等于给蜘蛛提供了两條路。
编碼、參數與锚点
中文路径、空格、括号在编碼後可能存在多種等價形式;參數的顺序、追踪參數不同也會生成新地址。锚点本身一般不影响抓取,但如果前端用锚点做路由,就需要額外核對服務端返回的内容是否一致。
核對清單
- 從日誌中筛出近一個月被抓取两次以上的路径,按去掉參數後的形式分组,看差异集中在哪一類。
- 检查 canonical 标簽是否指向站内實际使用的主版本,而不是另一條等價地址。
- 检查 Sitemap 里的寫法是否和内鏈一致,尤其是尾斜杠和大小寫。
- 检查 301 規則是否只跳一次,避免 A 到 B 再到 C 的鏈式跳轉。
- 检查參數過滤規則:確認對内容無影响的參數是被忽略,還是被處理成了獨立頁面。
- 检查前端路由生成的連結,是否在渲染後又追加了參數或斜杠。
修复後的观察方式
調整完成後,不必指望第二天日誌就變干净,已有地址的抓取记錄會保留一段時間。比較稳妥的做法是:
- 每周固定抽取同一时段的日誌,統計等價 URL 的請求條數占比,看趋势而不是看單日數字。
- 把新發布的頁面單獨分组,確認它們的連結寫法從一開始就统一。
- 對内鏈模板做一次性排查,比逐頁修改更省事。
等價 URL 的數量减少,通常意味着抓取机會更多地落在真正需要更新的頁面上,但具体抓取频次仍由搜尋引擎决定,不由站点單方面控制。
這項工作没有太多技巧,重点是保持寫法一致並且長期不反复。站点規模越大,模板层面的统一越關键,靠人工逐頁修改很难维持。