搜索抓取

大小写、参数顺序与结尾斜杠:蜘蛛眼里这是几条 URL

同一份内容如果存在多个可访问的地址,蜘蛛会按 URL 字符串把它们当成多条线索分别排队。本文梳理常见的“一页多址”情形、它带来的抓取代价,以及用跳转、canonical、内链和 Sitemap 收敛的具体做法。

搜索抓取

大小写、参数顺序与结尾斜杠:蜘蛛眼里这是几条 URL

同一份内容,如果存在多个都能正常打开的地址,蜘蛛会把它当成多条线索分别排队。判断依据不是页面里写了什么,而是 URL 字符串本身:字符不同,就是两条记录。

蜘蛛认的是字符串,不是内容

抓取队列里的键就是 URL。大小写不同、结尾斜杠有无、参数顺序颠倒,在队列里都是独立条目。蜘蛛通常不会先抓回来对比正文再合并,而是各自安排一次抓取。结果是同一个页面被反复取回,抓取额度被摊薄在重复地址上。

常见的“一页多址”

  • 域名变体:example.com 与 www.example.com、http 与 https 四种组合都能访问。
  • 结尾斜杠:/page 与 /page/ 都返回 200。
  • 默认文件名:/ 与 /index.html、/default.aspx 同时存在。
  • 参数顺序:?a=1&b=2 与 ?b=2&a=1 指向同一结果页。
  • 追踪参数:utm_source、spm、from 之类只在来源页出现的参数。
  • 大小写混用:/Article/123 与 /article/123。
  • 筛选与排序:排序字段、每页条数等参数组合出的地址。

多址并存带来的代价

第一是重复消耗抓取次数。站点规模越大,重复地址占比越高,留给新页面的额度就越少。

第二是信号被拆散。外部链接、站内链接分别指向不同版本时,收到的指向被打到几个地址上,任何一个版本看起来都不如实际重要。

第三是日志判断变难。同一篇文章在日志里出现多行,统计“被抓了多少次”“多久重访一次”时容易得出错误结论,进而误判抓取节奏。

怎么把地址收敛成一条

  1. 先定规范版本。域名带不带 www、用 http 还是 https,只保留一种,并确认证书、DNS、CDN 都跟着走。
  2. 其余版本做 301 永久跳转。优先用 301 而不是 302,跳转目标直接指向最终地址,避免链式跳转。
  3. 站内链接统一写成规范版。导航、面包屑、正文内链、分页链接都别混用带斜杠和不带斜杠的写法。
  4. Sitemap 只放规范地址。不要为了“多递线索”把变体地址也写进去,那等于主动制造重复。
  5. canonical 作为兜底。当跳转难以实施时,用 canonical 指向规范版;它和 301 冲突时,通常跳转的优先级更高。
  6. 追踪参数单独处理。页面上生成的分享链接尽量在跳转层剥掉参数;robots.txt 管不了参数顺序问题,别指望它来兜底。
一个常被忽略的细节:蜘蛛抓取时通常不能区分 /Article/123 和 /article/123,但服务器可能能——如果服务器对大小写不敏感,两个地址都会返回 200,重复就此产生。

上线前快速自检

  • 把规范地址换掉大小写、加减结尾斜杠,逐一访问,看是否都跳到同一个地址。
  • 在日志里挑一个热门页面,看它有多少种写法被请求过。
  • 抽查 Sitemap 中的 URL,是否与页面内链写法一致。
  • 检查参数页是否被站内链接大量引用,必要时加 noindex 或限制入口。

URL 规范化不是一次性的整理工作,而是每次改版、上线新模块、接入新统计工具时都要过一遍的环节。地址收敛得干净,抓取额度才能真正用在没被抓过的页面上。