🐈
Next.jsでdynamic routingに対応したsitemap.xmlを自動生成する
Next.jsで作成したwebサイトを公開するにあたり、 sitemap.xml を作成することになりました。
sitemap.xml を自動で生成するサービスは探せば見つかりますが、試してみたところ、どれもトップページしか含まれていませんでした。
dynamic routingで生成される全てのページを含む sitemap.xml を作ろうと調べてみたところ、以下のライブラリに行き着きました。
以下、 sitemap.xml 作成の手順です。
-
next buildを実行して静的ファイルを生成しておく - 任意のディレクトリに任意の名前のjavascriptファイルを作成
- README 内のスクリプトをコピー
- ↑を貼り付けたjsファイルが存在するディレクトリで
node ${作成したjs}を実行
コードのサンプルは以下
const sitemap = require("nextjs-sitemap-generator");
const fs = require("fs");
const BUILD_ID = fs.readFileSync(".next/BUILD_ID").toString();
sitemap({
baseUrl: "https://example.com",
pagesDirectory: __dirname + "/.next/serverless/pages",
targetDirectory: "public/",
ignoredExtensions: ["js", "map"],
ignoredPaths: ["[fallback]"],
});
baseUrl は自分のサイトのURL
pagesDirectory ディレクトリは生成された静的ページのディレクトリ
targetDirectory は sitemap.xml を出力するディレクトリ。 public/ にしておけばそのまま公開される。
ignoredExtensions/ignoredPaths は対象外のファイル・ディレクトリ
4.↑を貼り付けたjsファイルが存在するディレクトリで node ${作成したjs} を実行
これで targetDirectory 内に sitemap.xml が出力されます。
node 〜 は packages.json にscriptとして登録しておくと便利です。
Discussion