蜘蛛池的入口页承担的角色,说到底是把 URL 递到蜘蛛面前。但在这之前还有一个更前置的问题:蜘蛛得先知道这个入口页存在。哪怕入口页本身结构没问题、状态码正常、内容也在更新,只要没有任何一条路径能把蜘蛛领过来,它就只是一堆躺在服务器上的页面。
蜘蛛发现一个陌生 URL 的几条常见路径
搜索引擎发现 URL 的方式并不神秘,常见的无非几种:
- 主动提交:站点的 sitemap、搜索平台的 URL 提交接口、RSS/Atom 订阅源,都属于把 URL 直接交出去。
- 站外页面上的链接:别的站点、博客、导航页、论坛里有一条指向入口页的链接,蜘蛛在抓那些页面时顺路跟过来。
- 站内互链:入口页之间、入口页与栏目页之间互相链接,蜘蛛从已知页面扩散到未知页面。
- 历史队列:蜘蛛以前抓过某个域名,之后可能按自己的节奏回来重访,看看有没有新 URL 出现。
蜘蛛池常见的做法是后两条用得比较多——靠页面之间的互链,把蜘蛛从几个活着的入口带到其他入口。但如果整个池子只在内部打转,没有一个对外的接口,新入口的发现速度就会很慢。
站外链接引蜘蛛,关键不在数量
很多人把发外链理解成发得越多蜘蛛来得越快,实际操作里更值得关注的是下面几点:
- 链接所在页面能不能被抓:页面本身设了 nofollow、需要登录、靠 JS 异步渲染,或者被 robots 挡住,蜘蛛大概率看不到这条链接。
- 链接所在页面自己有没有被抓过:一个从没被收录、也没有任何抓取记录的页面,它上面的链接对蜘蛛来说等于不存在。
- 链接位置是否稳定:今天在首页、明天被删掉的链接,价值有限;长期存在的导航、友链、页脚位置更容易被反复走到。
- 主题是否相关:来源页面和入口页八竿子打不着,蜘蛛跟着走过来后,对入口页的判断也更模糊。
- 链接指向的 URL 是否长期有效:外链指向的入口页频繁换域名、换路径,最后变成 404,等于白白浪费这条引导路径。
简单说,一条来自经常被蜘蛛访问、主题接近、位置稳定的页面上的链接,作用通常比几十条散落在无人问津页面上的链接更实在。
几个容易踩的误区
只开一个来源
全部依赖 sitemap 提交,一旦提交失败或接口变动,蜘蛛的入口就断了;反过来,只靠外链、不做任何主动提交,发现速度也要看运气。两条腿走路更稳。
把链接放在蜘蛛到不了的地方
评论区链接、需要交互才展开的折叠内容、登录后才能看到的页面——这些位置对人可见,对蜘蛛未必可见。判断方法很直接:用抓取工具模拟一下,看返回的 HTML 里到底有没有这条链接。
入口页地址换来换去
入口页 URL 不稳定,等于每次都要让蜘蛛重新认识一遍。如果确实要换,至少让老地址跳转到新地址,而不是直接丢一个 404。
以为提交了就会马上被爬
提交只是告诉,抓不抓、什么时候抓、抓多深,仍然取决于蜘蛛自己的调度。提交后观察日志,比反复提交更有意义。
一些可执行的建议
- 给入口页保留一批长期不变的 URL,作为蜘蛛的固定落点,不要全部用一次性路径。
- 主动提交和外部引导同时做:sitemap 与推送负责覆盖面,稳定的外链负责把新入口领进门。
- 在入口页之间维持清晰、有限层级的互链,让蜘蛛从任意一个已知页面都能走到其他页面。
- 记录每次外链发布的位置和时间,再对照服务器日志里的蜘蛛访问记录,看哪些来源真的带来了抓取。
- 把精力放在少量稳定来源上,而不是批量铺垃圾链接。
把入口页想成一扇门:门本身要结实,但更重要的是有人愿意把蜘蛛领到门口。外链、提交、互链都是引路的动作,缺一环都不致命,只留一环就很脆弱。