https://nextjs.org/blog/next-13-3
2023.04.07 / Next js 13.3 버전이 출시되었다. 이번에 추가된 기능에 대해 찾아보자
// layout.js or page.js
export const metadata = {
title: 'Home',
};
// Output:
// <head>
// <title>Home</title>
// </head>
export default function Page() {}
export async function generateMetadata({ params, searchParams }) {
const product = await getProduct(params.id);
return { title: product.title };
}
// Output:
// <head>
// <title>My Unique Product</title>
// </head>
export default function Page() {}
title
, meta
, link
태그 외에도 아래 항목들을 추가로 주입할 수 있게 됐다
opengraph-image.(jpg|png|svg)
twitter-image.(jpg|png|svg)
favicon.ico
icon.(ico|jpg|png|svg)
sitemap.(xml|js|jsx|ts|tsx)
robots.(txt|js|jsx|ts|tsx)
manifest.(json|js|jsx|ts|tsx)
ex) 아래와 같은 폴더경로를 설정해서 파일 기반 메타데이터 API를 이용해보자
app
전체에 favicon
을 설정/about
경로에 og:image
를 추가app
├── favicon.ico
├── layout.js
├── page.js
└── about
├── opengraph-image.jpg
└── page.js
경로에 따라 아래와 같이 태그를 주입해준다
// Visiting "/"
<link rel="icon" href="<computedUrl>"/>
// Visiting "/about"
<link rel="icon" href="<computedUrl>"/>
<meta property="og:image" content="<computedUrl>" type="<computedType>" ... />
애플리케이션에 정적 파일을 추가하는 것이 가장 간단하고 일반적이지만 파일을 동적으로 만들어야 하는 경우가 있다. sitemap.js
파일을 생성해서 동적 경로 배열을 반환하는 파일을 추가해서 동적 사이트맵을 생성할 수 있다.
// app/sitemap.js
export default async function sitemap() {
const res = await fetch('https://.../posts');
const allPosts = await res.json();
const posts = allPosts.map((post) => ({
url: `https://acme.com/blog/${post.slug}`,
lastModified: post.publishedAt,
}));
const routes = ['', '/about', '/blog'].map((route) => ({
url: `https://acme.com${route}`,
lastModified: new Date().toISOString(),
}));
return [...routes, ...posts];
}
next/server의 ImageResponse를 사용해서 이미지를 생성
// /app/about/opengraph-image.tsx
import { ImageResponse } from 'next/server';
export const size = { width: 1200, height: 600 };
export const alt = 'About Acme';
export const contentType = 'image/png';
export const runtime = 'edge';
export default function og() {
return new ImageResponse();
// ...
}
next.js 에서 제공하는 다른 api 와 같이 사용할 수 있다. file-based-Metadata와 같이 opengraph-image.tsx파일에서 빌드 or 요청 시 동적으로 og:image 및 twitter image를 생성할 수 있다.