为什么结构会影响抓取
把一个 URL 交给蜘蛛之后,抓取工具大致会按顺序做几件事:下载 HTML、解析结构、切出正文、提取链接、判断是否值得继续往下抓。这个过程有预算限制,也有先后顺序——先出现的内容更容易被完整解析,被层层包裹或依赖脚本渲染的内容,往往在解析阶段就被降权处理。入口页的结构设计,本质上是在回答一个问题:蜘蛛只看一眼的话,能不能看懂这页是干什么的。
正文位置与嵌套深度
常见的入口页把导航、广告、推荐位全部堆在正文之前,正文被推到几百个节点之后。解析器一般保留一定的正文提取能力,但节点越深、噪音越多,抽取结果越容易跑偏。可参考的做法:正文尽量在 HTML 的前三分之一出现,主体内容用连续的块级标签承载,避免为了视觉布局堆一大串嵌套容器。
内链放在哪一层
链接的位置决定它被发现的概率。页脚的全站链接、侧栏的推荐位,和正文中间的自然链接,实际表现并不一样。入口页如果承担往下分流的职责,内链最好出现在正文区域内,锚文本能说明目标页大致讲什么,而不是清一色的“点击这里”“更多”。
JS 渲染:蜘蛛拿到的可能是空壳
如果入口页的正文和链接都由前端框架在浏览器里渲染,蜘蛛拿到的最初 HTML 可能只有几个空的容器标签。搜索引擎的渲染能力在提升,但它有自己的排队和超时机制,渲染失败或超时的情况并不少见。稳妥的做法是让关键内容出现在初始 HTML 里,脚本只做增强;确实需要渲染时,用服务端渲染或预渲染把首屏内容先吐出来。
- 首屏正文、主要内链不要等接口返回之后才写入。
- 避免用 JS 拼接跳转地址,蜘蛛不一定执行完这段逻辑。
- 分页、筛选这类依赖参数的模块,最好留一个静态可抓的入口。
几种拖后腿的写法
- 用 iframe 套内容:主体放在内嵌框架里,解析链路容易断,正文常常抓不到。
- 整页图片化:正文用图片承载,文字信息等于没有,锚文本也无从谈起。
- 层层嵌套的表格布局:结构冗余,解析成本高,正文提取更容易失败。
- 首屏弹窗或遮罩:不影响源码解析,但会挤占内容位置,也影响真实用户的体验。
一个简单的自查清单
- 禁用 JS 打开页面,正文和内链是否还在?
- 查看源码,正文出现在第几行,是不是被导航和广告挤到了很后面?
- 内链是否落在正文块内,锚文本是否有具体含义?
- 用抓取工具或日志确认蜘蛛实际拿到的,是不是和浏览器里看到的是同一版 HTML。
结构清晰不会让页面被收录,但它决定蜘蛛有没有机会读懂页面。结构混乱的入口页,即使被抓了很多次,也可能什么都没留下。
入口页的 HTML 不必追求极简,但要保证一件事:不依赖脚本也能读出一段完整的正文,和几个明确的下一步。做到这一点,剩下的交给内容和时间。