入口页里放的目标链接,经常不是干净的静态地址:有的是 ?id=123 这种带问号的,有的做过伪静态,有的区分大小写,还有的末尾带不带斜杠都能打开。这些差异在浏览器里看起来差不多,但在搜索蜘蛛眼里未必是同一个 URL。下面把常见情况和判断方法拆开讲。
搜索蜘蛛判断 URL 的先后顺序
搜索蜘蛛拿到一个链接字符串,首先把它当作一个独立的 URL 来对待。字符串层面不同,通常就先去重成两个候选地址。之后才轮到抓取、看返回内容、看页面里的规范化声明。如果服务端对这两个地址返回完全一样的内容,并且页面上写了 rel=canonical 或者做了 301,搜索引擎才有机会把它们合并成一个。
所以关键不在“入口页怎么写”,而在于目标站点有没有把不同写法的 URL 收敛到同一个地址。入口页写得再整齐,目标站点自己不收敛,照样会产生重复候选。
几种看起来一样、其实不一样的情况
1. 追踪参数和来源参数
?from=xxx、?ref=xxx 这类参数,如果服务端不做处理,返回内容和主地址一致,就会被当成两个 URL。搜索引擎确实倾向于忽略一部分常见参数,但没有保证,参数名越冷门越容易被当成独立地址。
2. session、token、时间戳
带 session id 或时间戳的地址最麻烦:每次生成都不一样,等于每次都在制造新 URL。入口页如果是动态拼这类参数,搜索蜘蛛会不断发现“新”地址,抓回来的却是同一篇内容,抓取预算会被白白消耗。入口页里尽量不要输出这类链接。
3. 伪静态与原始参数路径
伪静态只是在服务器层面把 /a/123.html 重写成了 /article.php?id=123。对搜索蜘蛛来说,它看到的是 /a/123.html,会按这个地址抓取。只要服务器稳定返回同一个页面,并且不额外暴露原始带参数地址,问题不大。真正的问题往往出在两种写法同时在站内出现:一边输出伪静态,一边又输出了原始参数地址。
4. 大小写、末尾斜杠、默认端口
这几类差异在很多服务器上会被当成不同 URL。入口页统一写法,比如全部小写、统一不带末尾斜杠,能减少无谓的重复,但前提是目标站点也这么处理。
入口页能管到的和管不到的
- 能管到:链接是否被输出、输出成什么字符串、放在哪个页面、周围有没有内容、是否被 nofollow 或 JS 隐藏。
- 管不到:目标站点返回什么状态码、是否做 301、canonical 指向哪里、搜索引擎最终合并成哪个版本。
- 也管不到:最终会不会进索引。被发现只是第一步。
实操上的排查顺序
- 先确认入口页输出的链接字符串是唯一的,同一个目标不要出现两种写法。
- 随机抽几个地址,用不带 cookie 的方式请求,对比返回内容和主地址是否一致。
- 看目标站点有没有对带参数的地址做 301 或 canonical 收敛。
- 翻服务器日志,统计同一篇内容对应了几个不同 URL 的抓取记录。
- 如果入口页是动态生成的,检查有没有把时间戳、session、随机数拼进链接。
发现 URL 和合并 URL 是两件事。入口页做得再规范,也只是把候选地址交到搜索蜘蛛手里;重复地址是否收敛,最终由目标站点的规范性设置决定。
一个容易被忽略的点
有些入口页为了“显得内容丰富”,会把同一个目标写成列表页地址、详情页地址、带参数地址三种形式。这不是在提升发现量,而是在制造重复。同一个目标在入口页里保留一条最规范的地址就够了。
另外,如果目标站点本身有分页、筛选、排序这类会产生大量参数组合的功能,入口页就更不该往这些地址上引。把抓取预算花在参数组合上,通常没有收益。
总结一句:带参数或伪静态的链接,搜索蜘蛛会当成新 URL 去尝试抓取;算不算同一个、会不会被合并,取决于服务端返回和站点的规范化设置。入口页能做的是减少重复写法、剔掉无效参数,把地址交得干净一点。