页面在浏览器里打开一切正常,标题、正文、图片都在,可在搜索蜘蛛的工具里查抓取结果时,拿到的 HTML 却只有导航和页脚;或者索引里留下一条几乎没有内容的记录。这类情况多数不是被惩罚,而是正文根本没有出现在蜘蛛第一次取回的那份 HTML 里。
搜索蜘蛛第一眼看到的是 HTML 源码
现在的搜索引擎具备渲染 JavaScript 的能力,但渲染是排在抓取之后的独立环节,并且有队列和配额。一个 URL 被请求时,搜索引擎先拿到的是服务器直接返回的源码;如果正文靠脚本在浏览器里拼出来,这一步拿到的就可能是空壳。
渲染需要排队,页面越重、脚本越多,等得越久。表现就是“抓了但没内容”“收录了但索引里只有框架”,甚至长期停在某个中间状态,既不前进也不消失。
先确认正文有没有进入抓取结果
- 看网页源代码,而不是“审查元素”。右键查看源代码得到的是服务器返回的原始 HTML,元素面板显示的是脚本执行后的结果,两者经常不一样。
- 用命令行请求一次,例如 curl 或 wget,看看返回体里到底有没有正文文字。
- 在搜索蜘蛛的站长工具里查“已抓取的 HTML”,直接和源代码对比。
- 翻服务器日志,确认搜索蜘蛛请求了哪些 URL、返回什么状态码,以及有没有请求正文依赖的接口。
几种容易让正文消失的写法
- 纯客户端渲染:HTML 只输出一个挂载节点,所有内容等脚本执行完再插入。
- 正文来自接口:页面是骨架,文字靠异步请求填进去,蜘蛛不一定等到接口返回就结束抓取。
- 内链只在脚本里生成:链接不是 a 标签的 href,而是点击事件,蜘蛛顺着走的时候看不到指向其他页面的路径。
- 关键内容折叠或藏在标签页里:默认不展开的部分,被抓到时可能被一并省略。
- 正文、评论、参数表也做懒加载:图片懒加载影响有限,但文字内容懒加载,漏掉的风险就明显上升。
让首屏内容直接出现在 HTML 里
- 标题、正文主体、主要内链尽量由服务端输出,脚本只负责交互增强。
- 如果整套前端是客户端渲染,考虑服务端渲染或预渲染,至少覆盖详情页和栏目页。
- 分页、相关推荐、面包屑使用真实的 a 标签和 href,方便蜘蛛顺着走。
- 接口尽量稳定快速,避免蜘蛛在等待中放弃或只拿到半截内容。
- 把最重要的 URL 放进站点地图,给蜘蛛留一条不依赖脚本的入口。
抓到空壳之后会发生什么
拿到没有正文的 HTML,搜索引擎可能先不收录,可能收录一个只有导航的版本,也可能判定页面内容单薄而降低抓取频率。这时候反复提交 URL、堆外链作用有限,先把抓取到的内容补齐更实际。使用蜘蛛池或其他引流手段时也一样,蜘蛛愿意来不等于页面有东西可看,抓取入口和页面本身的内容要分开看。
不要用脚本专门给搜索蜘蛛输出一份隐藏内容。抓取和渲染的结果最终会与真实用户看到的页面比对,做两套内容的收益很低,风险却不小。
遇到“收录了但索引里没内容”的情况,顺序通常是:先确认抓取到的 HTML 有没有正文,再确认脚本渲染是否及时到位,最后才讨论收录数量和展现形式。把第一步查清楚,后面的判断会简单很多。