运营蜘蛛池时,一个常被忽略的细节是:同一个目标页面,在入口页里往往被写成了好几个不同的 URL。比如有的入口页写 example.com/page,有的写 example.com/page/,还有的带上 ?from=xxx 之类的参数。这些形式在浏览器里看起来一样,但对搜索蜘蛛来说,它们是不同的字符串。链接哪一个,会影响抓取效率,也会影响后续对页面的判断。
URL 变体一般从哪来
- 大小写不一致,例如 Page 与 page 被当成两个地址。
- 结尾斜杠的有无,目录形式和文件形式混用。
- 协议与域名前缀不统一,http 与 https、带 www 与不带 www 并存。
- 跟踪参数、渠道参数被直接写进链接。
- 列表页的排序、筛选、分页参数。
- 会话 ID、临时 token 这类动态参数。
- URL 中含中文或空格,未做统一编码。
这些变体多半不是刻意造成的,而是编辑入口页内容时随手复制、不同批次模板不统一带来的。数量不多时看不出问题,入口页一多,同一条链接就会出现好几种写法。
搜索引擎会怎么处理这些变体
一般原则是:URL 本身是抓取和索引的基本单位。对于参数类 URL,搜索引擎有参数处理机制,会尝试识别哪些参数不改变内容;对于 http 与 https、带与不带 www,通常会依据重定向和规范声明来归并。但这些处理是黑盒,且不保证一定生效。
如果入口页把多种变体一起链接出去,可能出现的结果是:同一份内容被多次抓取,抓取配额被摊薄;页面收到的信号被拆分到几个地址上;日志里看起来抓取量不少,实际覆盖的独立页面却没有增加。所以更稳妥的做法是,从源头就只输出一种形态。
入口页链接时的几条实用原则
- 先确定规范 URL。每个目标页面选定一个固定写法,包括协议、域名前缀、路径层级和结尾斜杠,然后写进模板,所有入口页统一使用。
- 入口页里不要带跟踪参数。渠道统计、来源标记放在跳转层或统计工具里处理,不要出现在最终抓取的链接上。
- 变体该跳转就跳转。如果旧链接已经存在,用 301 指向规范 URL,而不是让两个地址同时可访问。
- 无法跳转时用规范声明。参数页、筛选页这类必须保留的地址,在页面里用 canonical 指向规范 URL。
- 同一入口页只出现一种写法。不要在一个入口页里既列出规范 URL,又列出它的参数版本。
参数类 URL 要特别留意
排序、筛选这类参数通常不改变页面主体内容,但会被当作新 URL 抓取。如果入口页大量链接这类地址,抓取会明显偏向参数组合,真正想推的目标页面反而被挤掉。可行的做法是:入口页只链接无参数的规范地址,需要跳转的部分交给页面内部的链接结构去处理。
怎么确认变体有没有被分开抓取
最直接的办法是看服务器日志。按 URL 路径前缀或参数特征做一次分组统计,观察同一路径下有多少种写法被访问过、各自被抓了多少次。如果发现同一路径存在多个高频变体同时被抓,说明入口页或站内链接里还残留着不统一的写法。
也可以在站内搜索或抓取工具里查一下,看看带参数的地址是否被单独返回了内容。如果返回内容和规范 URL 完全一致,却各自被访问,那基本就是变体分散抓取的情况。
几个容易踩的点
- 以为搜索引擎一定会自动归并,于是不做统一处理。
- 把参数 URL 当作额外入口页使用,短期看似增加了链接量,实际增加了重复抓取。
- 只改了新入口页的模板,旧入口页没有回改,变体继续存在。
- 锚文本和目标 URL 指向的形态不一致,容易让人误判链接是否正确。
URL 变体的统一是件前期花时间、后期省事的活。入口页数量越少越容易改,数量一多,清理成本会成倍上升。与其事后靠日志去猜哪些变体被抓,不如在生成链接时就把写法固定下来。