移动端导航用 JS 渲染,noscript 里放了一份完整菜单,抓取工具抓到的内链只有 12 条,菜单里的 48 条链接一条没进索引。乍看像缓存或者权限的锅,追下去往往不是。
curl -s https://example.com/ | grep -c 'href="/category/' # 统计初始 HTML 里的内链数量
追下去是这么回事:抓取工具默认执行 JS,noscript 里的内容在脚本可用时不会被渲染,等于被忽略。菜单链接既不在初始 HTML 里,也不在渲染后的 DOM 里。
「noscript 内容不抓取」这类改动最怕改一半,回滚脚本先准备好,再动生产。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。
同一份配置存在多处的,先确认改的是被加载的那一份。
具体做法是,把菜单链接直接输出到初始 HTML,不依赖 JS 插入;JS 只负责展开和收起,不动链接本身;用抓取工具的查看已渲染 HTML 确认链接存在。
验收就看一点,初始 HTML 里能数到 60 条内链,抓取工具的渲染结果里也在。
