当ブログは14.2.2)。
こういった
以下が
Route (app) Size First Load JS┌ ○ / 338 B 292 kB...├ ƒ /posts 475 B 662 kB├ ● /posts/[slug] 490 B 662 kB├ ├ /posts/p1e0lpm├ ├ /posts/p18vcqd├ ├ /posts/p16vfnq├ └ [+11 more paths]...└ ○ /sitemap.xml 0 B 0 B+ First Load JS shared by all 87 kB ├ chunks/313-7c44dae77fe97d18.js 31.4 kB ├ chunks/73ebd006-83408596cd117cc0.js 53.6 kB └ other shared chunks (total) 1.93 kB
○ (Static) prerendered as static content● (SSG) prerendered as static HTML (uses getStaticProps)ƒ (Dynamic) server-rendered on demand/posts をƒ とλ だったと
まず、
静的 Route で
もし、
では、
初めは
消去法でgenerateMetadata を
Route (app) Size First Load JS┌ ○ / 338 B 292 kB...├ ○ /posts 475 B 666 kB├ ● /posts/[slug] 490 B 666 kB├ ├ /posts/p1e0lpm├ ├ /posts/p18vcqd├ ├ /posts/p16vfnq├ └ [+11 more paths]...└ ○ /sitemap.xml 0 B 0 B+ First Load JS shared by all 87 kB ├ chunks/313-7c44dae77fe97d18.js 31.4 kB ├ chunks/73ebd006-83408596cd117cc0.js 53.6 kB └ other shared chunks (total) 1.93 kB
○ (Static) prerendered as static content● (SSG) prerendered as static HTML (uses getStaticProps)ƒ (Dynamic) server-rendered on demand(/posts が
generateMetadata 自体はsearchParams
page.tsx でparams はgenerateStaticParams1 でsearchParamssearchParams
元のgenerateMetadata は
export const generateMetadata = ({ searchParams }: { searchParams: Record<string, string | string[] | undefined> }) => { const category = (searchParams.category as string) ?? 'blog'; return { title: `${category.charAt(0).toUpperCase()}${category.slice(1)}`, description: 'Blog posts of Keisuke Hayashi.', alternates: { canonical: '/posts', }, openGraph: { url: '/posts', }, } satisfies Metadata;};これはhttps://kkhys.me/posts?category=tech とTech に
結果
export const metadata = { title: 'Blog', description: 'Blog posts of Keisuke Hayashi.', alternates: { canonical: '/posts', }, openGraph: { url: '/posts', },} satisfies Metadata;静的 Route かつページタイトルをhttps://kkhys.me/posts/tech のような
Next.js はgenerateStaticParams でsearchParams を
コンポーネントでsearchParams のpage.tsx のuseSearchParams
パラメータのsearchParams
searchParams のuseSearchParams を
今回の
また、
generateStaticParams関数を使うと 指定された パスパラメータは ビルド時に SSG が 実行される。 逆に 指定しなければ リクエスト時に SSG が 実行されるので できるだけ 指定した方が 良い ↩