Astro.jsで[ERROR] [build] Failed to call getStaticPaths for /[XX] [GetStaticPathsRequired]の対処法
目次
Astro.jsを利用していたらビルド時に下記のエラーが出ました。
単純なエラーのはずなのですが、思ったよりハマったので備忘録を残します。
エラー内容
今回遭遇したエラー内容は下記です。
このエラーに遭遇するときは、当たり前ではありますが、大抵の場合エラーメッセージにあるように getStaticPaths()
を利用すると解決します。
この場合だと、[tag]
ページに getStaticPaths()
が書いてあればいいはずです。
ただし、今回の場合はそれが直接的な原因ではありませんでした。
原因
ディレクトリに routing 設定をしていたのが原因でした。
今回動的ルーティングでは下記のようなディレクトリで実行していました。
src/pages/[tag]/[page].astro
これだとタグの種類ごとに、タグ名とページ番号が表示されるのですが、1から順番に表示されるのでタグ名だけで URL を叩かれてしまうと 404 になってしまいます。
そのため [tag]
にリダイレクト設定をしていました。
astro.js のリダイレクトは astro.config.mjs
に下記のように追加します。
export default defineConfig({
redirects: {
"/[tag]": "/[tag]/1",
},
});
ですが、この設定をしているとリダイレクトから [tag]
ページが存在されると認識されてしまい、その getStaticPaths()
が存在しないためエラーになっていました。
解決策
リダイレクトが原因なので、それを削除すれば解決です。
export default defineConfig({
redirects: {
-
},
});
リダイレクトせずに ページ番号なしのページを表示する。
リダイレクトせずにページ番号なしのページを表示するには、Astro.jsの機能として[...].astro
を利用すると実行できます。
今回の場合は [...page]
として下記のようにディレクトリを設定すると、ページ番号の1番目がタグ名だけになり、その後に2, 3と続くようになります。
src/pages/[tag]/[...page].astro
やはり元々 astro.js に備わっている機能を利用するべきでしたね。。。