批量做入口页时,为了省事,很多人会把目标链接写成相对路径。相对路径本身不会影响搜索蜘蛛发现链接,它照样会解析、照样会跟。真正的问题在于:解析相对路径的基准是入口页最终生效的 URL,而不是你本地编辑器里那个地址。只要这两者不一致,拼出来的 URL 就可能指向一个并不存在的页面。
搜索蜘蛛用什么做基准
抓到一个入口页时,搜索蜘蛛会记录页面最终的 URL(包括跳转之后的那一个),再拿它跟链接地址做拼接。所以同一段相对路径,放在不以斜杠结尾的地址和以斜杠结尾的地址里,结果可能完全不同。例如入口页地址是 https://a.com/list,链接写成 detail/1.html,拼出来是 https://a.com/detail/1.html;只有入口页地址是 https://a.com/list/ 时,拼出来才是 https://a.com/list/detail/1.html。
常见的拼接规则
- 以斜杠开头,从域名根开始拼,比如 /s/1.html
- 不以斜杠开头,从当前目录开始拼
- 以 ../ 开头,向上一级目录拼接
- 以 // 开头,沿用当前页面的协议,域名换成写的那一个
批量入口页最容易出错的几处
1. 入口页地址的结尾斜杠
这是最常见的一类。入口页是 /list 还是 /list/,浏览器和搜索蜘蛛的理解不一定一致,不少服务器还会把 /list 做一次跳转到 /list/。跳转之后基准变了,相对路径拼出来的地址也跟着变。如果入口页本身要经过一层跳转,建议直接改用绝对路径。
2. base 标签
如果入口页头部写了 base 标签,页面里所有相对路径都会以 base 里的地址为准,而不是页面自身 URL。老模板里留下的 base 很容易被忽略,结果整页链接被拼到另一个域名下。不确定就去掉 base,或者改用绝对路径。
3. 路径里的空格、中文和特殊字符
相对路径里带空格或中文却没有做编码,不同解析方式的处理结果不一样,可能被截断在空格处,也可能被转义成另一串地址。写入口页时,目标路径尽量用半角、无空格的形式;确实需要中文路径,先复制浏览器里编码后的完整地址。
4. 协议相对地址
写成 //a.com/page 时,协议是跟着入口页走的:入口页是 http 就以 http 请求,是 https 就以 https 请求。目标站如果只支持其中一种,另一半会多一次跳转甚至直接失败。批量场景里,明确写 https:// 更省事。
5. 大小写和末尾斜杠不一致
同一批入口页里,同一个目标有的写 /Page,有的写 /page,有的带末尾斜杠有的不带,在搜索蜘蛛看来就是几个不同的 URL。它不一定报错,但会把抓取量摊薄,日志看起来也比较乱。生成入口页之前统一一遍格式更稳妥。
上线前怎么自查
- 用浏览器开发者工具看一下入口页最终 URL,确认没有被跳转改写。
- 把入口页 HTML 里的相对路径手动拼一次,看结果是不是目标页面。
- 抽查几条链接直接请求一遍,确认返回 200,而不是 404 或一串跳转。
- 检查页面有没有 base 标签,有的话确认它的值是不是你有意设置的。
- 对比新旧两批入口页的路径写法,确认格式没有悄悄变过。
相对路径和绝对路径都能被搜索蜘蛛正常解析,区别只在于出错概率。入口页批量生成、地址经常变动的情况下,绝对路径写起来啰嗦,但排错成本低得多。
最后提醒一句:把链接写对,只解决了“能不能被发现”这一环,后面还有抓取、渲染以及是否被选中收录等环节,这些不是靠改路径能控制的。入口页地址和链接格式保持稳定、可预测,才是长期最容易维护的做法。