用 Hugo 0.120 搭的文档站,模板里拿 .Site.BaseURL 当 canonical,所有页面都输出成首页地址。上线两个月,内页收录只有 12 条,其余全被并到首页。
把日志和配置对完,能解释这个现象的基本就这几处。模板用了 Site.BaseURL 而不是当前页的 Permalink;主题的 partial 在列表页和单页共用同一段 head;baseURL 末尾少了斜杠,拼接结果变成根路径;sitemap 里的地址正确,反而让两套信号互相矛盾。
先抽查三条内页的 canonical
curl -s https://docs.example.com/guide/install/ | grep canonical
模板改成输出当前页永久地址
<link rel="canonical" href="{{ .Permalink }}">
然后确认 baseURL 带结尾斜杠
baseURL = "https://docs.example.com/"
等前面都确认过,再重新构建并对比 sitemap
hugo --minify && grep -c '<loc>' public/sitemap.xml
这台环境是别人交接的,不少默认值被动过,只能一项项核。
改完先别撤,确认这几项。每条内页的 canonical 指向自身,sitemap 与页面地址一致,内页收录一个月内从 12 条涨到 300 条以上。
容易忽略的是,静态站生成器的变量很容易写错一层,canonical 这种全站生效的标签要在三种模板上各抽查一次。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
