文章目录里的 #toc-2 点击后总是停在页面最上方,地址栏里锚点没了,直接粘完整地址打开也一样,只有手动滚下去才看到对应小节。日志里能对上时间点,这种反而好排。
服务端那条 301 的 Location 末尾带了一个空 #,浏览器以 Location 为准重写地址,原来的片段被覆盖。页面里的小节 id 和目录链接对不上时,也会出现同样的落回顶部。这一点先确认清楚,后面就不用反复试。
curl -sI https://example.com/guide/hello | grep -i '^location' # 期望 https://example.com/guide/hello 不带 # 和 ? grep -n 'id="toc' wp-content/themes/your-theme/single.php
这次卡住的地方就在「锚点丢失」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
处理上按这个顺序:把 301 的 Location 改成不带 # 也不带查询串的干净地址;检查目录链接的 id 和标题生成的 id 是否一致,别用中文做 id;用 curl 看跳转响应头,确认 Location 末尾没有多余的符号;改完在浏览器里点三次目录,确认地址栏保留 #toc-2。
结果对不对很好判断,点目录链接后页面停在对应小节,地址栏里的 #toc-2 不会被跳转抹掉。
