站点上线一段时间后,常会遇到一种情况:内容本身没什么明显问题,但搜索蜘蛛似乎在一些"长得几乎一样"的地址上反复出现。大小写不同、末尾斜杠有无不同,往往就是这类重复的来源之一。这些地址在浏览器里打开可能显示同样的页面,在服务器日志里却是几条独立的记录,对爬虫来说也属于不同 URL。
同一个页面为什么会有多个入口
URL 的路径部分在大多数 Linux 服务器和主流 Web 框架中是区分大小写的。这意味着 /News/2024/ 和 /news/2024/ 是两个不同的路径,如果服务器没有做统一处理,一个返回正常页面,另一个可能返回 404,也可能因为框架的宽容匹配而返回同一份内容。
末尾斜杠同理。以目录形式发布的栏目页,习惯上写成 /seo/;以文件形式发布的页面,则常写成 /seo.html 或 /seo。当站内链接、Sitemap、外部引用三处的写法不一致时,同一个页面就会以多种形态被记录。
尾斜杠的两种处理思路
要不要保留尾斜杠,本身没有绝对的对错,关键是全站一致,并且让另一种写法稳定地收敛到主版本。
- 统一保留:栏目、专题、标签等聚合页统一以斜杠结尾,具体页面不加斜杠,规则简单,便于人工核对。
- 统一去掉:所有路径都不带尾斜杠,由服务器或框架把带斜杠的请求 301 到不带斜杠的版本。
- 避免混用:同一层级里既有 /a/ 又有 /b,后者访问 /b/ 时返回 200 而不是跳转,就会长期留下两个可访问地址。
需要注意的是,用 301 收敛比用 302 或直接返回 200 更清晰。301 明确告诉爬虫哪个是主版本,链接权重也更容易集中到一个地址上。
大小写问题的常见来源
大小写混乱通常不是有意为之,而是几个环节叠加的结果:
- 编辑在正文里手写内链,随手把栏目名首字母大写。
- CMS 生成链接时按标题生成别名,某些版本会保留大写字母。
- 旧站迁移时没有做路径统一,老地址被原样保留下来。
- 第三方统计、广告或合作方复制链接时改动了个别字母的大小写。
其中最难处理的是"服务器能识别但写法不同"的情况:访问不存在的路径本该 404,却因为程序做了模糊匹配,把请求导向了猜测出的页面。这种写法会让爬虫认为多个地址都有效。
落地时的几条操作建议
- 先定规范:明确路径统一小写、尾斜杠规则,写进编辑和开发的手册,后续新页面按规则生成。
- 再做收敛:对已有的错误写法配置 301,指向规范地址,避免出现多级跳转链。
- 内链自查:用抓取工具或站内链接检查功能,扫一遍正文、导航、面包屑里的链接写法是否统一。
- Sitemap 对齐:Sitemap 中只放规范地址,不要同时收录带斜杠和不带斜杠的版本。
- Canonical 兜底:对于确实无法改动的历史地址,用 rel=canonical 指明主版本,但不要把它当成长期方案。
怎么确认问题是否存在
比较直接的办法是翻服务器日志,筛选状态码为 200 的请求,看看同一路径是否以多种大小写或带斜杠、不带斜杠的形式反复出现。也可以手动在浏览器里分别访问带斜杠和不带斜杠的地址,观察是否发生跳转、跳到哪个地址。
这项工作的收益不在当天,而在于减少后续重复抓取,把有限的抓取机会留给真正需要更新的页面。规范化做得越早,后面改的成本越低。
大小写与尾斜杠看起来是细节,但它们决定了同一个页面在爬虫眼里算一个还是几个。规则清晰、收敛稳定,URL 发现的过程才会更干净。