入口页的 URL 形态,为什么值得单独说
蜘蛛池的作用是让搜索引擎蜘蛛持续发现并访问一批入口 URL。如果同一个页面存在多种 URL 写法,蜘蛛很可能把它们当成不同地址反复抓取:日志里的请求数看着不少,实际访问的却是同一份内容。这既占用了抓取额度,也让后面判断抓取情况时看不出真实面貌。
URL 归一不是为了让地址好看,而是为了让蜘蛛的每一次请求都落在真实存在的页面上。
参数:能不带就不带
参数是最常见的重复来源。同一个入口页,挂在不同的查询串后面,对蜘蛛来说就是不同的 URL。
- 跟踪参数:utm_source、from、ref 这类用于统计或标记来源的参数,最好只出现在对外推广链接里,不要写进页面内链和 sitemap。
- 排序与筛选参数:?sort=、?page= 这类可以组合出大量变体。如果这些变体页面主体内容基本相同,考虑用 robots 或 canonical 收敛,而不是任由它们铺开。
- 纯前端状态参数:只为交互服务的参数,尽量改成路径片段,或者干脆去掉。
判断标准很简单:这个参数换个值,页面主体内容是否真的不同?答案是否,就不该让它成为一个可独立抓取的地址。
大小写与结尾斜杠
服务器和部分 CDN 对大小写敏感,/Entry/ 与 /entry/ 可能对应两份缓存,也可能指向同一份内容。结尾斜杠同理:/page 和 /page/ 在不少配置下会各返回一次 200。
处理方式选一种坚持到底即可:
- 在服务器层做 301 归一,把变体统一跳到选定写法;
- 页面内所有链接、sitemap、跳转目标统一使用同一写法,不给蜘蛛发现变体的机会。
两种方式可以叠加,但不要一边做 301、一边又在模板里输出另一种写法,否则等于自己制造新的变体。
URL 编码与特殊字符
中文、空格、百分号编码在不同环节容易出岔子。建议入口页路径尽量使用小写英文加连字符,避开中文路径、空格以及需要二次编码的字符。如果确实要用,确保内链、跳转、sitemap 三处的编码方式一致,不要一处用原始字符、一处用 %E4%B8%AD 这样的形式。编码不一致时,蜘蛛会把它们视为两个地址,抓两次,读到的却是同一页。
内链一致性是成本最低的收敛手段
蜘蛛顺着链接走。如果同一个入口页在站内被三种写法链接过,等于主动告诉蜘蛛这里有三个页面。把导航、列表页、正文内链、面包屑里的 URL 统一成一种写法,往往比逐页调整内容更快见效,改模板通常比改内容省事。
一个可以照着走的检查顺序
- 从抓取日志里提取被访问的入口 URL,去掉查询串后统计重复情况。
- 把重复度高的地址挑出来,确认是参数、大小写还是斜杠造成的。
- 先在服务器层做 301 或统一规则,再回头改模板里的链接写法。
- 更新 sitemap,只保留归一后的地址。
- 过一段时间再从日志核对,看变体请求是否减少。
请求数下降不一定代表抓取变差,很多时候只是把重复的那部分挤掉了。真正要看的是归一后的地址有没有被稳定访问。
容易踩的几个坑
- 只加 canonical 而不改内链:蜘蛛仍会反复抓取变体,只是信号被合并,日志里的无效请求依然存在。
- 301 链太长:A 跳 B 再跳 C,蜘蛛跟到中途可能就停止,直接跳到最终地址更稳妥。
- 改完马上要结论:抓取习惯的调整需要时间,观察窗口太短容易误判方向。
把这些细节固化成模板规范之后,入口页的维护会轻松很多——新增一批 URL 时,不必再逐个检查写法,也更容易从日志里看清哪些地址真正被蜘蛛接受。