GoogleのSearch Consoleを利用したことがある人には馴染み深いsitemap.xmlというファイルがあります。これを、Cloudflare Pages上でホスティングしているNext.js製サイトで生成する方法を紹介します。
Next.jsには便利なライブラリがたくさんありますが、今回もnext-sitemap
というNext.jsで使えるサイトマップ生成ライブラリを利用します。robots.txt
も同時に生成できる上に設定もカンタンです。
使っているパッケージ管理システムに合わせて、以下のコマンドでインストールしていきます。
next-sitemap
はデフォルトでnext-sitemap.config.js
というファイルをルートディレクトリに設置することで、その設定を読み取ります。
今回、盲点だったのがESモジュール扱いとなって出力時にエラーとなったので、CommonJSとして扱うようにnext-sitemap.config.cjs
という名前にリネームしました。
設定ファイルは上記の形ですが、それぞれがどういった意味を持つのかを解説します。
NEXT_PUBLIC_ROOT_URL
の同一になることが一般的。lastmod
を設定の是非。デフォルトはtrue
だが、すべて同一日時が入ってしまうのでfalse
にする。sitemap-{i}.xml
ごとのURL数。越えるとファイル分割する。robots.txt
を生成の是非。true
で生成。robots.txt
の設定オプション。robots.txt
のポリシー。今回はSSGで生成した場合のファイルがある場合、NEXT_SSG_FILES
として定義したファイル群をGoogleなどのクローラーボットが通らないようにしたいという意図です。そして、ChatGPTの学習ボットであるGPTBotが通らないようにrobots.txt
を設定しています。
動作確認をしていきましょう。package.json
に記載されたscripts
の部分へ以下を追加します。
postbuild
を実行するとnext-sitemap
が実行されるという形です。
今回は.cjs
にしているため、--config
オプションをつけていますが、next-sitemap.config.js
ファイルの場合は必要ありません。
.gitginore
ファイルに生成されたものが混ざらないように以下のように書いておきましょう。(忘れがちのため書いておきます)
すでにCloudflare Pagesでアプリケーションのビルドが設定されてある前提とします。
Next.js(Static HTML Export)だとデフォルトでnpx next build
が設定されますが、これをnpm run build
に修正します。
Cloudflare Pagesビルド設定
こうすることで、先ほどpackage.json
に設定したnext-sitemap
コマンドが実行されることになります。
ここまで設定できたらデプロイしてみましょう。
デプロイが成功したら、https://ドメイン/sitemap.xml
を開いた際に下記画像のようにXMLが表示されます。
公開されたsitemap.xml
今回は手っ取り早くsitemap.xmlを生成しましたが、next-sitemap
は他にも非同期を使った設定なども可能となっています。
自身のアプリケーションの特性や、配布・設定先となる対象に合わせてカスタマイズしていきましょう。