๋ชฉํ SEO (๊ฒ์ ์์ง ์ต์ ํ)๋ฅผ ํตํด ๊ฒ์์์ง์์ ์น์ฌ์ดํธ๊ฐ ์์ ๋ ธ์ถ๋๋๋ก ํจ
๋ฐฐ๊ฒฝ : ๊ตฌ๊ธ์ ๊ตฌ๊ธ๋ด์ด๋ผ๋ ์น ํฌ๋กค๋ฌ๋ฅผ ์ฌ์ฉํด์ ์ฌ๋ฌ ์ฌ์ดํธ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๋์๋ค๋๋ฉฐ ์์งํ๋ค. ์์ง๋ ๋ฐ์ดํฐ๋ค์ ๊ตฌ๊ธ ์๋ฒ๋ก ์ ์ก๋์ด ๋ถ์๋๊ณ , ์ธ๋ฑ์ค์ ๋ฐ์๋๋ค. ๊ตฌ๊ธ ๊ฒ์์์๋ ์ด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด์ ๋ณด๋ค ์ ์ ํ ํ์ด์ง๊ฐ ์์์ ๋ํ๋๋๋ก ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ค.
๊ตฌ๊ธ๋ด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ง๋ง, SPA ๋ฑ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ค์ฌ์ผ๋ก ๊ตฌ์ถํ ์น์ฌ์ดํธ์์๋ ์ฃผ์๊ฐ ํ์ํ๋ค.
CSR๋ง ์ ๊ณตํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ/ํ๋ ์์ํฌ๋ SEO์ ๋ฌธ์ ๊ฐ ์๋ค. ํ๋ฉด์ ๊ทธ๋ฆฌ๋๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฉด ํฌ๋กค๋ฌ๋ ์ฒ๋ฆฌ๋ฅผ ๋ฉ์ถ๊ฒ ๋์ด ์ฝํ ์ธ ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฐ์ ธ๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
Next.js๋ SEO์ ๊ฐํ๋ค. SSR์ด๋ SSG๋ฅผ ํ์ฉํ๋ฉด, ํด๋ผ์ด์ธํธ์ ์ด๊ธฐ์ ํ๋ฉด์ ๊ทธ๋ฆฌ๋๋ฐ์ ์๊ฐ์ ์์ง ์์๋ ํฌ๋กค๋ฌ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฐ์ ธ๊ฐ ์ ์๋ค. ๊ฒ์์์ง์ ์ฃ๊ณ ์ถ์ ํ์ด์ง๋ SSR/SSG๋ฅผ ํ์ฉํ๋๋ก ํ์.
SEO ์ฒดํฌ๋ฆฌ์คํธ (ํค์๋)
- Meta tags
JSON-LD Schema
Sitemap
robots.txt
Link tags
Script optimization
Image optimization
ํ๋์ฉ ๋ณด๋๋ก ํ์
1. Meta tags (๋ฉํ ํ๊ทธ)
๋ฉํ ํ๊ทธ๋ <head> ์์ <meta>์์๋ก, ์น์ฌ์ดํธ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฒ์ ์์ง๊ณผ ์์ ๋ฏธ๋์ด ํ๋ซํผ์ ์ ๊ณตํ๋ค
๋ฉํ๋ฐ์ดํฐ์ ๋ํ ์์ธํ ์ค๋ช ; https://nextjs.org/docs/app/building-your-application/optimizing/metadata
[๋ฉํํ๊ทธ์ ํฌํจ๋๋ ์ฌํญ]
- title
- description
- ๊ฐ๊ฐ ํ์ด์ง์ ์ ๋ชฉ๊ณผ ๊ฐ์๋ฅผ ๊ธฐ์
- ํฌ๋กค๋ฌ๊ฐ ์์งํด, ๊ฒ์์์ง์ ํ์ํ ๋ ์ ๋ชฉ๊ณผ ์ค๋ช ์ด ๋๋ค.
- keywords
- robots
- viewport
- charSet
- charSet๊ณผ ๋ทฐํฌํธ๋ Next.js ์ฑ ๋ผ์ฐํฐ์ ์ํด ์๋์ผ๋ก ์ถ๊ฐ๋๋ฏ๋ก ์ ์ํ ํ์๊ฐ ์๋ค.
Open Graph meta tags:
-property ์์ฑ์ธ og:๋ก ์์ํ๋ <meta> ํ๊ทธ๋ OGP(Open Graph Protocol)์ฉ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๋ค.
- ๋ค์ ๋งํ๋ฉด , SNS์์ ํด๋น ํ์ด์ง ๋งํฌ๋ฅผ ๊ณต์ ํ์ ๋ ์ธ๋ค์ผ์ ํ์ํ๋ ๋ด์ฉ์ ์ ์ํ๋ค.
- og:site_name
- ํ์ด์ง ์ฌ์ดํธ๋ช
- og:locale
- og:title
- ํ์ด์ง์ ์ ๋ชฉ
- og:description
- ํ์ด์ง์ ์ค๋ช ๋ฌธ
- og:type
- ๊ฐ์ฒด ํ์ (video, movie, webpage, article,,)
- og:url
- ํ์ด์ง์ URL
- og:image
- ์ธ๋ค์ผ ์ด๋ฏธ์ง์ URL
- og:image:alt
- og:image:type
- og:image:width
- og:image:height
- static metadata์ ๊ฒฝ์ฐ export const metadata
- dynamic data์ ๊ฒฝ์ฐ generateMetadata
import type { Metadata } from 'next'
// either Static metadata
export const metadata: Metadata = {
title: '...',
}
// or Dynamic metadata
export async function generateMetadata({ params }) {
return {
title: '...',
}
}
static metadata
์ ์ ๋ฉํ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ page.tsx ํน์ layout.tsx ์์ export const metadata ๋ก ์ ์ํ๋ฉด ๋๋ค.
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: '...',
description: '...',
}
export default function Page() {}
- title
- ์ ๋ชฉ ์ ์
- ๋ฌธ์์ด ํน์ template object ๋ก ์ ์ํ ์ ์๋ค.
export const metadata = { title: 'Next.js',}
<title>Next.js</title>
<template object>
import type { Metadata } from 'next' export const metadata: Metadata = {
title: {
template: '...', default: '...', absolute: '...',
},
}
ํ)
app/layout.tsx ์ ํ๋ฒ ์ ์ฉํด๋์ผ๋ฉด ํ์ ํ์ด์ง์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด ์๋ ์ ์ฉ์ด ๋๋ค.
app/about/page.tsx ์ ๋ค์ ์ฝ์
import type { Metadata } from 'next'
export const metadata: Metadata = {}
// Output: <title>Acme</title>
viewport
์๋ฒ ์ปดํฌ๋ํธ์์๋ง ์ง์
//app/layout.tsx
import type { Viewport, Metadata } from "next";
export const viewport: Viewport = {
width: "device-width",
initialScale: 1,
themeColor: "#ffffff"
};
https://nextjs.org/docs/app/api-reference/functions/generate-viewport
Dynamic Metadata
[id]/page.tsx ์ ๊ฐ์ ๋์ ์ธ ํ์ด์ง์ ์ฌ์ฉํ๋ค.
generateMetadata function์ผ๋ก ์ํ
export async function generateMetadata(
{ params, searchParams }: Props,
parent: ResolvingMetadata
): Promise<Metadata> {
const { slug } = params;
์ถ์ฒ : https://nextjs.org/docs/app/api-reference/functions/generate-metadata#template-object
'nextjs,tailwindcss,vercel' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ ์คํฌ๋ฆฝํธ ๊ธฐ์ด - ํจ์ , ํจ์ ํ์ (0) | 2024.05.21 |
---|---|
ํ์ ์คํฌ๋ฆฝํธ ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด , any (0) | 2024.05.21 |
cloudfare ๋๋ฉ์ธ vercel์ ์ ์ฉํ๊ณ ๋ฐฐํฌํ ๋ ์ค๋ฅ ( ERR_TOO_MANY_REDIRECTS ์ค๋ฅ ์์ ) (0) | 2024.05.14 |
[ ํ๋ก ํธ์๋ ] ์ปดํฌ๋ํธ , nextjs ์ค๊ณ ๋ฐฉ์ (0) | 2024.05.12 |
nextjs , typescript ํ์ฉํ ํ๋ก ํธ ๊ฐ๋ฐ (0) | 2024.05.12 |