0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

generateMetadataを使用して動的にURLを設定する際に出るエラーの対処法

Last updated at Posted at 2026-01-12

はじめに

generateMetadataでURLを動的に設定するさいにエラーがでたので対処法をメモ書きレベルで残しておきます。

環境

  • OS:Windows11
  • 開発ツール:VSCode
  • フレームワーク:Next.js 16.0.7
  • 言語:React

やろうとしたこと

まずやろうとしたことは、WebサイトのSEO対策のためにgenerateMetadataを使用して、下記のようなソースで正規URLの設定を行おうとしました。
ポイントとしては、引数から動的に文字列を取得してURLに設定していることです。

// メタ情報設定
export async function generateMetadata(
  { params }: { params: { slug: string } }
): Promise<Metadata> {
  const canonical = `${PUBLIC_CATEGORY}/${params.slug}`;
  return {
    alternates: { canonical },
    openGraph: { url: canonical },
  };

今までのNext.jsではこのやり方で設定できたはずですが・・・。

起きた事象

実行したら、下記のようなエラーが起きました。

 Invalid source map. Only conformant source maps can be used to find the original code. Cause: Error: sourceMapURL could not be parsed

読んだ感じ、JSのコンパイル前とコンパイル後の対応関係を示すソースマップが無効ですよ~みたいなエラー内容と思われます。

対処方法

解決方法は単純で、引数のパラメータをawaitで取得するように修正しました。

// メタ情報設定
export async function generateMetadata(
  { params }: { params: { slug: string } }
): Promise<Metadata> {
  const { slug } = await params;  // 追記
  const canonical = `${PUBLIC_CATEGORY}/${slug}`;
  return {
    alternates: { canonical },
    openGraph: { url: canonical },
  };
}

前のソースだとslugが取得できずにundefinedとなっていましたが、
awaitをつけて待機してあげる必要がありましたって感じですね。

Next.js 15 以降、ルーティングパラメータが非同期 (Promise) で渡されるようになったので、
paramsawaitで取得しなきゃいけないですよ~っていう単純なエラーでした。

解決してよかったです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?