nextjs,tailwindcss,vercel

SEO ๊ธฐ๋ณธ์„ค์ • : ๋ฉ”ํƒ€ํƒœ๊ทธ์™€ ๊ตฌ๊ธ€์„œ์น˜์ฝ˜์†”, ๋„ค์ด๋ฒ„์— ๋“ฑ๋กํ•˜๊ธฐ

์ฃผ์˜ ๐Ÿฑ 2024. 7. 12. 20:18
728x90

SEO - ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ƒ๋‹จ์— ๋œจ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ

๊ตฌ๊ธ€๊ณผ ๊ฐ™์€ ๊ฒ€์ƒ‰์—”์ง„์€ ๋ด‡์„ ํ†ตํ•ด ์‚ฌ์ดํŠธ๋“ค์„ ํฌ๋กค๋งํ•˜๊ณ  ์ €์žฅ(์ธ๋ฑ์‹ฑ)ํ•˜๋Š”๋ฐ, ์ด๋•Œ ๋ด‡๋“คํ•œํ…Œ ์ด ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ž˜ ๋ณด์—ฌ์ค˜์„œ ๋†’์€ ์ˆœ์œ„์— ์ฐจ์ง€ํ•˜๋„๋กํ•ด์•ผ ํ•œ๋‹ค. 

 

์Šฌํ”„๊ฒŒ๋„ ์ •ํ•ด์ง„ ๊ณต์‹์€ ์—†๋‹ค. ์ด๋ ‡๊ฒŒ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌด์กฐ๊ฑด ๊ฒ€์ƒ‰๊ฒฐ๊ณผ ์ฒซ๋ฒˆ์งธ๋กœ ๋œฌ๋‹ค. ์ด๋Ÿฐ๊ฒŒ ์žˆ์œผ๋ฉด ๋„ˆ๋„๋‚˜๋„ ํ•˜๊ธฐ๋–„๋ฌธ์— ๊ณต์‹์ด ๋  ์ˆ˜ ์—†์„๊ฒƒ์ด๋‹ค..

๊ทธ๋ƒฅ ์ตœ๋Œ€ํ•œ ํ•  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ๋“ค์„ ์„ธํŒ…ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•œ๋‹ค. 

 

์‹ค์ œ๋กœ ๋‚ด๊ฐ€ ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ํ•ด๋ณด๋‹ˆ ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ ์ƒ๋‹จ์— ๋œจ๊ฒŒํ•˜๋Š”๊ฒŒ ์—„์ฒญ ์–ด๋ ต๋‹ค 

๊ทธ๋ž˜๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ธํŒ…ํ•ด์•ผํ•˜๋Š” ๊ฒƒ๋“ค์ด ์žˆ๋‹ค. 

 

nextjs app router ๋ฅผ ์“ฐ๊ณ  ์žˆ์–ด์„œ ์ด๋ฅผ ์˜ˆ์‹œ๋กœ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค. 

layout.tsx์—์„œ ๊ตฌ์„ฑํ•œ๋‹ค. 

[ ์‚ฌ์ดํŠธ ๋“ฑ๋กํ•˜๊ธฐ ]

์ผ๋‹จ ๊ฐ€์žฅ ๋จผ์ € ํ•  ์ผ์€ ๊ตฌ๊ธ€ ์„œ์น˜์ฝ˜์†”์— ๋‚ด ์‚ฌ์ดํŠธ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ฒ€์ƒ‰์—”์ง„์—์„œ site:{๋‚ด ์›น์‚ฌ์ดํŠธ ์ฃผ์†Œ} ์ด๋ ‡๊ฒŒ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ ๋‚ด ์‚ฌ์ดํŠธ๊ฐ€ ๋œฌ๋‹คํ•˜๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ๋œ ๊ฒƒ์ด๋‹ค. 

 

์—ฌ๊ธฐ์— ๋‚ด ๋„๋ฉ”์ธ์„ ๋“ฑ๋กํ•˜๋ฉด ๊ตฌ๊ธ€์— ๋‚ด ์‚ฌ์ดํŠธ๋ฅผ ์น˜๋ฉด ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค. 

https://search.google.com/search-console/welcome

 

 

 

 

๋‚ด url์„ ๋“ฑ๋กํ•˜๊ณ  ๋‹ค์Œ์„ ๋ณต์‚ฌํ•ด ๋‚ด ์ฝ”๋“œ์— ๋ถ™์ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Verfiy๋ฅผ ํ•˜๋ฉด ๋!

 

 

ํ•œ๊ตญ์–ด ์‚ฌ์ดํŠธ๋ผ๋ฉด ๋„ค์ด๋ฒ„์—๋„ ๋“ฑ๋กํ•ด๋ณด์ž. ๋„ค์ด๋ฒ„ ์„œ์น˜์–ด๋“œ๋ฐ”์ด์ €์—์„œ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค. 

https://searchadvisor.naver.com/

 

 

 

[๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„ค์ •]

๊ณต์‹๋ฌธ์„œ ; https://nextjs.org/docs/app/building-your-application/optimizing/metadata

 

Optimizing: Metadata | Next.js

Use the Metadata API to define metadata in any layout or page.

nextjs.org

 

1. ๋™์ ์œผ๋กœ ์„ค์ •



export async function generateMetadata(
{ params: { locale } }: { params: { locale: string } }
): Promise<Metadata> {
const t = await getTranslations({ locale, namespace: 'Metadata' });

return {
title: t('title'),
description: t('description'),
alternates: {
canonical: `https://turtleinvest.site/${locale}`,
languages: {
},
},
openGraph: {
title: t('title'),
description: t('description'),
siteName: t('siteName'),
locale: locale,
type: 'website',
},
};
}

์ด๋ ‡๊ฒŒ ํ•˜๊ฑฐ๋‚˜, ๊ธฐ์กด๋ฐฉ์‹๋Œ€๋กœ 

 

<html lang={locale} itemScope itemType="http://schema.org/WebSite">
<head>
<meta name="viewport" content="width=device-width" />
<meta property="og:url" content="https://www.turtleinvest.site"/>
<meta property="og:type" content="website"/>
<meta property="og:title" content={t('title')} />
<meta property="og:description" content={t('description')} />
<meta property="og:image" content="https://www.turtleinvest.site/og1200.jpg"/>

<meta name="twitter:card" content="summary_large_image"/>
<meta property="twitter:domain" content="turtleinvest.site"/>
<meta property="twitter:url" content="https://www.turtleinvest.site"/>
<meta name="twitter:title" content={t('title')} />
<meta name="twitter:description" content={t('description')} />
<meta name="twitter:image" content="https://www.turtleinvest.site/og1200.jpg"/>

 

์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.



 

 

opengraph ์„ค์ • - ๋งํฌ ๊ณต์œ ํ–ˆ์„ ๋•Œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋กœ ๋ณด์—ฌ์ง€๋Š” ์š”์†Œ๋“ค!

https://www.opengraph.xyz/

ํ˜„์žฌ ์ž์‹ ์˜ ์‚ฌ์ดํŠธ๋ฅผ ์ง„๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํ™•์ธํ•˜๋ฉด ๋ถ€์กฑํ•œ ๊ฒƒ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๊ธฐ๋•Œ๋ฌธ์— ํŽธํ•˜๋‹ค.

og:image๋Š” ๋‚ด๊ฐ€ ์‚ฌ์ดํŠธ๋ฅผ ๋ฉ”์‹ ์ €๋‚˜ ๋‹ค๋ฅธ ๊ณณ์— ๊ณต์œ ํ–ˆ์„๋•Œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋กœ ๋ณด์—ฌ์ง€๋Š” ์ด๋ฏธ์ง€์ด๋‹ค.

์„ค์ •ํ•˜๊ณ  ๋‚ด ์นดํ†ก์œผ๋กœ ๊ณต์œ ํ–ˆ์„ ๋•Œ: 

๋ฐ˜์‘ํ˜•