很多人把注意力放在入口页数量和投喂量上,却忽略了一个更靠前的问题:被投喂的 URL 本身长什么样。同一批内容,换成不同的 URL 结构,蜘蛛在解析、去重和排优先级时的结果可能完全不同。URL 结构不是装饰,它直接影响爬虫愿不愿意继续往下走。
为什么 URL 结构会影响发现效率
爬虫拿到一个地址后,会先做几件事:判断格式是否合法、是否与已知 URL 重复、是否在同一主域下、层级是否过深。这些判断大多只看字符串,不看页面内容。所以一个看起来只是写法不同的地址,可能直接被归一化掉,或者被判定为低优先级,排在队尾很久也轮不到。
目录层级:够用就行
目录越深,蜘蛛从入口页到达目标页需要经过的跳转越多,中间任何一环没抓到,后面的路径就断了。一般建议入口页到目标页控制在三跳以内,目录层级尽量不超过四级。
几种常见排布
- 扁平式:/a/123.html,层级浅,适合量大、结构单一的目标页。
- 分组式:/news/2024/05/123.html,便于人工管理,但要确认入口页能覆盖到中间层。
- 混合式:栏目页扁平、详情页带日期,兼顾可读性与维护成本。
层级本身没有绝对好坏,关键是入口页里能不能给出通向每一层的链接,别让中间层变成没有入口的孤岛。
参数:能去就去的部分
带参数的地址通常有三种下场:被归一化、被当成新地址重复抓取、或者因为动态特征明显而降低优先级。
- 跟踪参数(utm、from、spm 之类):对内容没有意义,建议在生成投喂列表时就剔除。
- 分页参数:page=2、page=3 是有意义的,但入口页要有明确的翻页链接,别指望蜘蛛自己猜出来。
- 筛选与排序参数:容易组合出大量近似地址,投喂前最好只保留少数几个固定组合。
如果确实需要参数,尽量把关键参数放进路径里,让它看起来像一个稳定的资源地址,而不是一次性的查询结果。
静态化与伪静态
静态地址(.html 结尾或纯路径)在历史上对抓取更友好,但今天更关键的是页面能否稳定返回、是否存在重复、有没有被入口页链接到。伪静态只是把参数藏起来,如果底层仍然会生成大量近似页面,问题依旧存在。
判断标准可以很朴素:同一个页面内容,是否只有一个稳定地址能打开,并且这个地址在入口页里出现过。
入口页里的链接怎么写
URL 结构定下来之后,还要看它在入口页里的呈现方式。纯文本地址、可点击链接、带锚文本的链接,被发现和被跟随的概率并不相同。同一批目标地址,建议在入口页用可点击的 a 标签输出,锚文本尽量与目标页主题相关,避免清一色写“点击这里”。
落地时的几条建议
- 先定 URL 规则,再批量生成,不要边生成边改规则。
- 投喂前做一次去重与存活检测,把带冗余参数的地址清掉。
- 入口页到目标页的路径固定下来,减少随机跳转。
- 同一批 URL 的结构保持一致,方便后续从日志里对比效果。
- 规则调整后留出观察期,隔几天再看日志变化,不要当天就下结论。
URL 结构解决的是“蜘蛛能不能顺畅找到并区分这些地址”的问题,它不保证收录,也不保证排名。把结构做干净,只是把后面那些环节的门槛降下来,真正决定结果的仍然是内容本身与站点整体质量。