动态页面要确认可见内容,核心不是看浏览器里显示了什么,而是看服务器返回给爬虫的原始HTML里有没有这些内容。如果文字、链接、价格等关键信息只靠JavaScript在浏览器端渲染出来,而原始响应里是空壳,搜索引擎可能抓不到,也就谈不上收录和排名。常见误解是“用户能看到就等于搜索引擎能看到”,这两者并不等价。
浏览器打开页面时会执行JavaScript,把数据请求回来后再把内容插入DOM,所以你看到的是渲染后的结果。而爬虫第一步拿到的是服务器直接返回的HTML源码。如果源码里只有<div id="app"></div>这类容器,正文全靠脚本填充,那么能否被收录就取决于搜索引擎是否愿意并有能力执行这些脚本。
不同搜索引擎对JavaScript渲染的支持程度、渲染时机和资源配额都不一样,不能假设所有引擎都会完整执行。因此动态页面确认可见内容,必须分两层看:原始HTML层和渲染后DOM层。
方案一:服务端渲染或预渲染,让服务器直接返回含正文的HTML。方案二:保留客户端渲染,依赖搜索引擎执行JavaScript。两者适用条件不同。
判断依据很简单:问一句“关掉JavaScript后,这个页面还有没有核心内容”。如果关掉后一片空白,就属于高风险。
curl直接请求URL,例如curl -s https://example.com/page,检查返回的HTML是否包含目标文字。这一步能排除浏览器渲染的干扰。检查结果判断:原始HTML已含正文,说明抓取层面基本可见;只有渲染后才有,则需要评估搜索引擎渲染能力,或改用服务端渲染。
robots.txt限制抓取,不等于把已收录页面可靠移除,它只是阻止爬虫访问,已索引的页面可能仍会显示。站点地图提交也不保证收录,它只是帮助发现URL。HTTPS同样不保证内容可见或排名靠前。这几项都不能替代对原始HTML内容的确认。
下一步:挑一个你关心的动态页面,用curl抓一次源码,把原始HTML里缺失的关键内容列出来,再决定是改服务端渲染还是调整内容加载方式。