Next.js์ SEO
๐ SEO๋ฅผ ์ํ ๋๊ตฌ
robots.txt
๋ ๊ฒ์์์ง ํฌ๋กค๋ฌ๊ฐ ์น ์ฌ์ดํธ๋ฅผ ํฌ๋กค๋งํ๋ฉด์ ์ ๋ณด๋ฅผ ์์งํ ๋ ์์ธ์คํ๊ฑฐ๋ ์ ๋ณด ์์ง์ ํด๋ ๋๋ ํ์ด์ง๊ฐ ๋ฌด์์ธ์ง๋ฅผ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
์๋์ ๊ฐ์ด ์์ฑํ๋ค.
User-agent: *
Allow: /
Sitemap: https://hjk329.github.io/sitemap.xml
User-agent
ํ๋๋ ๊ท์น์ด ์ ์ฉ๋๋ ํฌ๋กค๋ฌ๋ฅผ ์๋ณํ๋ค.
Allow
ํ๋๋ ํฌ๋กค๋ง์ด ํ์ฉ๋๋ URL์ ์๋ฏธํ๋ค.
Disallow
ํ๋๋ฅผ ์ค์ ํด์ ์ ๊ทผํ๊ฑฐ๋ ์ ๋ณด ์์ง์ด ํ์ฉ๋์ง ์๋ ํ์ด์ง๋ฅผ ํ์ํ ์๋ ์๋ค.
Sitemap
ํ๋๋ ๋๋ฉ์ธ ๋ด์ ํ์ด์ง ๋ชฉ๋ก์ ์๋ฏธํ๋ค.
Next.js์์ robots.txt
์ sitemap
์ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ํจํค์ง๊ฐ ์๋ค! โจ
next-sitemap
๊ฐ๋ฐ ํ๊ฒฝ๋ณ๋ก config๋ฅผ ์ค์ ํ ์๋ ์๊ณ , ๋์ ์ธ ํ์ด์ง์ ๋ํด์๋ ์ฌ์ดํธ๋งต์ ์์ฑํ ์ ์๋ค๊ณ ํ๋ค.
๊ณต์ ๋ฌธ์๋ฅผ ๋ฐ๋ผํด๋ณด๋ฉด config๋ ์๋์ ๊ฐ์ด ์ค์ ํ๋ค.
/** @type {import('next-sitemap').IConfig} */
module.exports = {
siteUrl: process.env.SITE_URL || 'https://example.com',
generateRobotsTxt: true, // (optional)
// ...other options
}
๊ทธ๋ฆฌ๊ณ package.json
์ ์๋์ ๊ฐ์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๋ค.
{
"build": "next build",
"postbuild": "next-sitemap"
}
์ดํ์ ์ดํ๋ฆฌ์ผ์ด์
์ ๋น๋ํ๋ฉด public ํด๋ ์๋์ robots.txt
์ sitemap.xml
ํ์ผ์ด ์์ฑ๋๋ค!
๋์ ํ์ด์ง์ ๋ํ ์ฌ์ดํธ๋งต์ ์๋์ ๊ฐ์ด ์์ฑํ ์ ์๋ค.
// pages/server-sitemap.xml/index.tsx ํ์ผ์ ์์ฑํ๋ค.
import { getServerSideSitemap } from 'next-sitemap'
import { GetServerSideProps } from 'next'
export const getServerSideProps: GetServerSideProps = async (ctx) => {
// CMS์ URL์ ๊ฐ์ ธ์จ๋ค (articleId ๋ฅผ ๋ฆฌํดํด์ฃผ๋ api ์์ฒญ์ ํ ์ ์๊ฒ ๋ค)
// const urls = await fetch('https//example.com/api')
const fields = [
{
loc: 'https://example.com', // Absolute url
lastmod: new Date().toISOString(),
// changefreq
// priority
},
{
loc: 'https://example.com/dynamic-path-2', // Absolute url
lastmod: new Date().toISOString(),
// changefreq
// priority
},
]
return getServerSideSitemap(ctx, fields)
}
// Default export to prevent next.js errors
export default function Sitemap() {}
๊ทธ๋ฆฌ๊ณ config ์ค์ ์ ์๋์ ๊ฐ์ด ์ถ๊ฐํ๋ค.
// next-sitemap.config.js
/** @type {import('next-sitemap').IConfig} */
module.exports = {
siteUrl: 'https://example.com',
generateRobotsTxt: true,
exclude: ['/server-sitemap.xml'], // static ์ฌ์ดํธ๋งต ๋ฆฌ์คํธ์์๋ ์ ์ธํ๋ค
robotsTxtOptions: {
additionalSitemaps: [
'https://example.com/server-sitemap.xml', // ์ถ๊ฐ ์ฌ์ดํธ๋งต์ ์ค์ ํ๋ ์ต์
์ ์ถ๊ฐํด์ค๋ค
],
},
}
๋๊ธ๋จ๊ธฐ๊ธฐ