Google Search Console「代替ページ(適切な canonical タグあり)」を Docusaurus の trailingSlash で解決した
Google Search Console から「代替ページ(適切な canonical タグあり)」の修正が完了しなかった旨のメールが届いた。調べてみると、GitHub Pages のリダイレクト挙動と Docusaurus が生成する canonical タグのトレーリングスラッシュが噛み合っていなかった。
エラーの内容
Search Console の Coverage レポートに「代替ページ(適切な canonical タグあり)」が残っていた。英語では "Alternate page with proper canonical tag"。
この状態は、Google がページを発見したものの、canonical タグが指す URL がアクセスした URL と異なるため、インデックスに登録せず「代替版」扱いにしていることを意味する。
原因の特定
ブログは Docusaurus v3 で構築し、GitHub Pages でホストしている。
GitHub Pages のリダイレクト挙動
GitHub Pages は、ディレクトリ内の index.html に対して次のような挙動をする。
GET /blog/posts/2026/03/19/welcome
→ 301 Redirect → /blog/posts/2026/03/19/welcome/
つまりトレーリングスラッシュなし URL にアクセスすると、スラッシュあり URL へ自動リダイレクトされる。
Docusaurus が生成していた canonical タグ
一方、Docusaurus(trailingSlash 未設定)が生成する canonical タグはスラッシュなしだった。
<!-- Docusaurus デフォルト(trailingSlash 未設定) -->
<link rel="canonical" href="https://nakahodo.com/blog/posts/2026/03/19/welcome">
サイトマップも同様。
<loc>https://nakahodo.com/blog/posts/2026/03/19/welcome</loc>
Google の認識の流れ
- サイトマップの URL(スラッシュなし)を Google がクロール
- GitHub Pages が 301 リダイレクト → スラッシュあり URL に到達
- スラッシュあり URL の HTML を読むと canonical はスラッシュなし URL を指している
- Google は「スラッシュあり URL はスラッシュなし URL の代替ページ」と判断
- スラッシュなし URL を辿ると再びリダイレクト…
canonical が指す URL と実際に配信される URL が一致しないため、Google がどちらをインデックスすべきか判断できなくなっていた。
修正
docusaurus.config.ts に trailingSlash: true を1行追加するだけ。
const config: Config = {
url: 'https://nakahodo.com',
baseUrl: '/blog/',
trailingSlash: true,
...
};
これで Docusaurus はすべての URL をスラッシュあり形式で生成する。
修正後の canonical タグ
<link rel="canonical" href="https://nakahodo.com/blog/posts/2026/03/19/welcome/">
修正後のサイトマップ
<loc>https://nakahodo.com/blog/posts/2026/03/19/welcome/</loc>
GitHub Pages が配信するスラッシュあり URL と canonical が一致し、リダイレクトも不要になった。
修正後に Search Console でやること
- サイトを再ビルド・デプロイ
- Search Console で「サイトマップを再送信」
- 問題のページを URL 検査ツールで「インデックス登録をリクエスト」
- Coverage レポートで「修正を検証」
Google の再クロールには数日〜2週間かかる。すぐに結果は出ないが、canonical の不整合が解消されれば順次インデックスに登録されていく。
まとめ
| 修正前 | 修正後 | |
|---|---|---|
| canonical | .../welcome(スラッシュなし) | .../welcome/(スラッシュあり) |
| サイトマップ | スラッシュなし | スラッシュあり |
| 実際の配信 URL | .../welcome/(リダイレクト後) | .../welcome/ |
| Google の判断 | 代替ページ | 正規ページ |
GitHub Pages × Docusaurus の組み合わせで canonical エラーが出ていたら、まず trailingSlash: true を疑ってみてほしい。
Live with a Smile!
