蜘蛛在决定抓不抓一个页面之前,第一步是确定“这是哪个地址”。URL 对蜘蛛来说不只是路径,它同时承担三个角色:页面的唯一标识、站点层级里的位置信息,以及是否值得抓取的初步信号。一个入口页如果 URL 结构混乱,很可能在内容还没被读到之前,就已经被判定为重复或低优先。
一、先解决唯一性:同一个页面只应有一个地址
同一份内容如果存在多个可访问地址,蜘蛛会分别抓取、分别存储,权重被摊薄,页面之间还可能互相竞争。常见的重复来源有:
- 大小写混用:/PageA 和 /pagea 在多数服务器上是两个不同地址。
- 结尾斜杠:/list 与 /list/ 是否等价,取决于服务端配置和重写规则。
- 默认首页:/index.html、/index.php、/ 三者同时可访问。
- 跟踪参数:?utm_source=...、?from=... 这类参数会生成大量变体。
- 参数顺序:?a=1&b=2 与 ?b=2&a=1 是否算同一页。
处理思路通常是固定一种写法,其余用 301 指过去,并且站内链接统一使用规范地址,而不是一个页面里混着两种写法。
二、参数不是不能用,是要少而稳定
动态 URL 本身不会导致不被抓取,但参数越多、取值越不可预测,蜘蛛能走完的路径就越少。入口页的 URL 建议控制在一到两个参数以内,参数名固定、取值有明确边界,比如分类 id、页码。排序方式、样式切换、会话追踪这类参数,尽量不要出现在入口页的内链里。
如果站点用了伪静态,要留意重写规则别制造出“看起来是静态、实际能无限展开”的地址,例如 /tag/a、/tag/a/a、/tag/a/a/a 这种层层叠加的组合。
三、层级深度决定蜘蛛能走多远
蜘蛛对一个入口页的抓取预算和耐心都是有限的。从入口页到目标页之间隔了几跳,直接影响目标页被发现的概率。一般可以参考:
- 重要页面尽量控制在三到四跳以内。
- 目录名用有意义的英文或拼音,避免 /c/1/、/a/b/c 这类无信息路径。
- 每一层都要有可读的列表页或聚合页,让蜘蛛有台阶可踩。
- 面包屑和上一级链接要真实可点,不要只写在结构化数据里。
锚文本最好和路径语义一致。满屏“点击这里”的链接,蜘蛛只能靠 URL 去猜内容,判断效率会明显下降。
四、可以固定检查的几项
- 站点是否只保留一个规范域名,http/https、www/非 www 是否只留一个入口。
- 列表页翻页是否有明确上限,末页之后是否还存在空页或重复内容。
- 随机抽几个入口页,看内链里有没有带参数、斜杠写法不一致的地址。
- 日志里出现频次异常高的 URL 变体,往往就是需要收敛的地方。
把 URL 结构做干净,是为了让蜘蛛少做无效判断,而不是保证某个结果。它解决的是“能不能被顺利发现和区分”,剩下的仍然取决于内容本身。