确认动态页面在301转向后的可见内容,核心是分别检查“用户看到的页面”和“搜索引擎抓取到的页面”:先看浏览器地址栏最终落在哪个URL,再用抓取工具查看该URL返回的HTML中是否有实际正文,最后确认正文是否由JavaScript在客户端渲染。动态页面常见的情况是,301后落地页返回的HTML里只有框架或空容器,真正内容要等脚本执行后才出现,因此肉眼可见不等于抓取可见。
处理301转向时,容易把三个层面混在一起:
301转向只负责把请求从一个URL导向另一个URL,它不保证落地页的正文一定出现在初始HTML中。如果落地页是动态渲染的,浏览器可见与HTML源码可见可能不一致。
先确认301是否真的发生、最终落到哪里。可以用命令行工具查看响应头,例如:
curl -I https://example.com/old-page
重点看状态码和Location字段。如果返回301并带有目标地址,说明服务器层转向已生效;如果直接返回200,说明旧地址没有发生301,需要先修正转向规则。接着请求最终地址,把返回的HTML保存下来,检查其中是否包含目标正文。这一步判断的是服务器端可见性,与浏览器渲染无关。
如果落地页HTML里只有<div id="app"></div>这类空容器,正文很可能由JavaScript在客户端生成。此时可以按以下顺序判断:
适用条件是:落地页为单页应用、前端框架渲染或接口异步取数。判断结果是,如果初始HTML无正文、渲染后有正文,则可见内容依赖客户端执行,需要评估抓取端是否执行脚本以及执行是否稳定。
301转向后,还要确认落地页没有被抓取规则挡住。检查robots.txt是否禁止抓取落地页路径,检查页面meta name="robots"是否含noindex。需要明确:robots.txt的抓取限制不等于可靠的索引移除,被禁止抓取的页面仍可能因外部链接出现在索引中;站点地图也不保证收录。因此这些检查只能说明“是否允许抓取和索引”,不能替代对可见内容的确认。
根据检查结果决定下一步:
代价方面,服务端渲染改动成本较高但可见性最稳定;预渲染适合内容变化不频繁的页面;纯客户端渲染实现简单,但抓取可见性依赖脚本执行,风险相对更高。选择时应以“初始HTML是否包含正文”为第一判断依据。
下一步:选取一个已发生301转向的动态页面,用curl -I确认转向链,再保存落地页原始HTML,搜索其中是否包含正文关键词。若没有,按上面的禁用JavaScript测试确认渲染依赖,再决定是否改为服务端渲染或预渲染。