Closed13
App Routerでのメタデータ設定を理解する

これを読む

基本はmetadata
かgenerateMetadata
をexportすればいいらしい。
// either Static metadata
export const metadata = {
title: '...',
};
// or Dynamic metadata
export async function generateMetadata({ params }) {
return {
title: '...',
};
}

型も用意してくれているらしい
import { Metadata } from 'next';

layout
かpage
からexportする

え??searchParamsってこんなふうに受け取れたの??
type Props = {
params: { id: string };
searchParams: { [key: string]: string | string[] | undefined };
};

うーん、parentとの解決は勝手にやってくれるのかい?やってくれないのかい?どっちなんだい!
// optionally access and extend (rather than replace) parent metadata
const previousImages = (await parent).openGraph?.images || [];
return {
title: product.title,
openGraph: {
images: ['/some-specific-page-image.jpg', ...previousImages],
},
};

解決してくれるかはわからんけどdefault値を設定しておけば安心っていうのはわかった
export const metadata = {
title: {
default: 'Acme',
},
};

template記法もあるんや
import { Metadata } from 'next';
export const metadata: Metadata = {
title: {
template: '%s | Acme',
},
};

やっぱり解決はしてくれそう。親を無視するためのプロパティがある。
import { Metadata } from 'next';
export const metadata: Metadata = {
title: {
absolute: 'About',
},
};
// Output: <title>About</title>

If a page does not define its own title the closest parents resolved title will be used.
書いてあった

Vercelつこてたらこれは設定しそう?
metadataBase: `https://${process.env.VERCEL_URL}`
When VERCEL_URL is detected: https://
{process.env.PORT || 3000}. {process.env.VERCEL_URL} otherwise it falls back to http://localhost:

「書き損じ」的なことがないようによしなにいろいろやってくれるらしい。

あとはシンプルに「meta dataってこんなに色々あるんやな」っていう感想になってきた。Next.jsの〜とかじゃなくて、シンプルにここらへんを理解したほうが良さそう。
このスクラップは2023/05/31にクローズされました