用 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 这种全站生效的标签要在三种模板上各抽查一次。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189