现场是这样的。顶部导航的二级菜单由 CSS hover 控制,HTML 里其实有链接,但外层容器设了 visibility:hidden,蜘蛛判定不可见。日志里栏目二级页一周只被抓 12 次,一级首页被抓了 9000 次。
中间走过弯路,把「移动端菜单由 JS 注入,初始 HTML 里没有」当成主因,改完现象没变。
原因不止一个,得分开看。容器 visibility:hidden 让蜘蛛把链接当成隐藏内容;二级菜单没有可访问的 HTML 入口页;导航链接用了 data-href,没有真正的 href。
先确认初始 HTML 里有没有二级链接
curl -s https://www.example.com/ | grep -o 'href="/category/[^"]*"' | sort -u | head -10
接着看容器的可见性样式
curl -s https://www.example.com/ | grep -o 'visibility:[^;"]*' | head
再往下检查展开按钮有没有 aria 属性
curl -s https://www.example.com/ | grep -c 'aria-expanded'
补一个栏目总览页做入口
curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/category/
这次没动代码,只在配置和运行环境上找原因。
怎么算真的好了,看的是同一批现象。HTML 里能看到全部二级链接,栏目页的抓取次数一周内从十几次涨到几百次。
提醒一点。隐藏链接经常被判成作弊,导航要保证内容在初始 HTML 里可见可点。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
