[Next.js] SEO ์ต์ ํํ๊ธฐ
SSR์ CSR์ SEO
CSR (React.js)
CSR(ClientSide Rendering)์ ๊ฒฝ์ฐ ์ด๊ธฐ์ ๋น html ๋ฌธ์๋ฅผ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์, ๋ด์ด ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ธฐ ์ด๋ ต๊ธฐ๋๋ฌธ์ SEO์ ๋ถ๋ฆฌํ๋ค.
SSR(Next.js)
ํ์ง๋ง, SSR(ServerSide Rendering)์ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ํ์ด์ง๋ฅผ ์๋ฒ์์ ๋์ ์ผ๋ก ์์ฑํด ๋ธ๋ผ์ฐ์ ์ ๋ณด๋ด๋ ๋ฐฉ์์ผ๋ก, ์ด๋ฏธ ์๋ฒ์ชฝ์์ ๋ง๋ค์ด์ง ์์ฑ๋ html์ ๊ฒ์์์ง๋ค์ด ํฌ๋กค๋ง์ด ๊ฐ๋ฅํ๊ธฐ๋๋ฌธ์ ๊ฒ์์ ์ ๋ฆฌํด์ง๋ค.
SEO ์ง๋จ
โ SSR์ ์ฅ์ ์ธ SEO ์ฑ๋ฅ ์ต์ ํ ์์ ํ๊ธฐ ์ , SEO checkup์ ํด๋ณด์๋ค.
https://pagespeed.web.dev/analysis/https-balanco-vercel-app/hxv2uh2yl9?form_factor=desktop
pagespeed๊ฐ ๋ฌด์จ ๊ธฐ์ค์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, pagespeed์์ ์ฒ์ ๊ฒ์ฌํด๋ณธ๊ฒฐ๊ณผ ์๋ฌด๋ฐ ์์ ์ ์ํ๋๋ฐ ๋๋ฌด ๋์ ์ ์๊ฐ ๋์ค๊ธธ๋ ์ด์ํ๋ค ์ถ์ด ๋ค๋ฅธ ์ฌ์ดํธ๋ก SEO ์ง๋จ์ ํด๋ณด์๋ค.
์ฐ์ ๊ต์ฅํ ์์ธํ๊ฒ ๋ถ์ํด์ ์๋ ค์ค๋ค!
function Heading({ children }: { children: React.ReactNode }) {
return (
<h1 className="font-bold text-3xl sm-max:text-2xl text-center mb-12 sm-max:mb-6">
{children}
</h1>
);
}
export default Heading;
๊ฐ page์์ heading ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๊ฐ ํ์ด์ง์ ํ์ดํ๋ก ์ฌ์ฉํ๋๋ฐ, h2ํ๊ทธ์์ h1ํ๊ทธ๋ก ๋ณ๊ฒฝํด์ฃผ์๋ค.
Robots.txt
robots.txt ํ์ผ์ ๊ฒ์ ์์ง ๋ก๋ด ๋๋ ํฌ๋กค๋ฌ์๊ฒ ์น ์ฌ์ดํธ์ ์ด๋ค ๋ถ๋ถ์ ํฌ๋กค๋งํ ์ ์๋์ง์ ๋ํ ์ง์นจ์ ์ ๊ณตํ๋ ํ ์คํธ ํ์ผ๋ก, ๊ฒ์ ์์ง์ด ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋ ์ฒซ ๋ฒ์งธ๋ก ํ์ธํ๋ ํ์ผ ์ค ํ๋๋ผ๊ณ ํ๋ค.
- ๊ฒ์ ์์ง ํฌ๋กค๋ฌ ์ ์ด: robots.txt ํ์ผ์ ์ฌ์ฉํ์ฌ ํน์ ๋๋ ํ ๋ฆฌ ๋๋ ํ์ผ์ ๊ฒ์ ์์ง ํฌ๋กค๋ฌ์๊ฒ ์จ๊ธฐ๊ฑฐ๋ ํ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๋ฅผ ์ํ ์ค์ํ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณดํธํ๊ฑฐ๋, ๊ฒ์ ๊ฒฐ๊ณผ์ ํ์๋๊ธฐ๋ฅผ ์์น ์๋ ์ฝํ ์ธ ๋ฅผ ์จ๊ธธ ์ ์์ต๋๋ค.
- ํฌ๋กค๋ง ์ต์ ํ: ์น ์ฌ์ดํธ์ ํฌ๊ธฐ๊ฐ ํฌ๊ฑฐ๋ ์ผ๋ถ ํ์ด์ง๊ฐ ๊ฒ์ ๊ฒฐ๊ณผ์ ํ์๋๊ธฐ๋ฅผ ์์น ์์ ๋, robots.txt ํ์ผ์ ์ฌ์ฉํ์ฌ ํน์ ๋๋ ํ ๋ฆฌ๋ URL์ ํฌ๋กค๋ง์์ ์ ์ธํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฒ์ ์์ง ํฌ๋กค๋ฌ๊ฐ ๋ถํ์ํ ํ์ด์ง๋ฅผ ํฌ๋กค๋งํ์ง ์๊ณ , ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
User-agent: * //๋ก๋ด ๋ฐฐ์ ํ๋กํ ์ฝ์ ๋ฒ์
Disallow: //๋ชจ๋ ๊ฒฝ๋ก ํ์ฉ (๋ก๋ด์ด ์ ๊ทผ์ ํ์ฉํ URL ์ง์ )
https://developers.google.com/search/docs/crawling-indexing/robots/create-robots-txt?hl=ko
siteMap
siteMap์ ์น ์ฌ์ดํธ ๋ด์ ํ์ด์ง,๋์์,์ด๋ฏธ์ง ๋ฑ ์ฝํ ์ธ ์ ๋ชฉ๋ก๋ค์ ๋์ดํ๊ณ ๊ทธ ๊ด๊ณ์ ์ ๋ณด๋ค์ ๊ณ์ธต์ ์ด๊ณ ์ฒด๊ณ์ ์ผ๋ก ๋ช ์ํ๋๊ฒ์ ๋งํ๋ค. ์ด๋ฅผ ํตํด ๊ตฌ๊ธ๊ฐ์ ์ฃผ์ ๊ฒ์์์ง๋ค์ด ํด๋น ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ข ๋ ํจ์จ์ ์ผ๋ก ํฌ๋กค๋งํ ์ ์๋๋ก ๋๋๋ค๊ณ ํ๋ค.
ํ์ง๋ง ์ฌ์ดํธ๋งต์ ์ถ๊ฐํ๋ค๊ณ ํด์ ์๊ฐ๋ณด๋ค SEOํจ๊ณผ๊ฐ ํฌ์ง ์๋ค๊ณ ํ๋๋ฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ด์ง ๊ตฌ์กฐ์ ๋งํฌ๊ด๊ณ๊ฐ ์ ์์ ์ผ๋ก ์ ๊ตฌ์ฑ๋์ด ์๋ค๋ฉด, ๊ตณ์ด ์ฌ์ดํธ๋งต ์์ด๋ ๊ฒ์์์ง ๋๋ถ๋ถ์ด ํ์ด์ง๋ฅผ ์ฐพ์ ํฌ๋กค๋ง ๋ฐ ์ธ๋ฑ์ฑ์ด ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค.
siteMap์ด ํ์ํ ๊ฒฝ์ฐ
- ๊ท๋ชจ๊ฐ ํฐ ์ฌ์ดํธ
- ์ฐ๊ฒฐ๋๋ ์ธ๋ถ ๋งํฌ๊ฐ ๋ง์ง์์ ์ฌ์ดํธ
- ๋ฏธ๋์ด ์ฝํ ์ธ (๋์์, ์ด๋ฏธ์ง)๊ฐ ๋ง๊ฑฐ๋ ๋ด์ค์ ๋ ธ์ถ๋๋ ์ฌ์ดํธ
siteMap์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ
- ๊ท๋ชจ๊ฐ ์์ ์ฌ์ดํธ
- ๋ด๋ถ์ ์ผ๋ก ๋งํฌ๊ด๊ณ๊ฐ ๊ธด๋ฐํ๊ฒ ๊ตฌ์ฑ๋ ์ฌ์ดํธ
- ๋ ธ์ถ ๋ฏธ๋์ด ์ฝํ ์ธ ๊ฐ ๋งํ์ง ์๊ฑฐ๋ ์๋ ์ฌ์ดํธ
https://velog.io/@sejinkim/%EC%82%AC%EC%9D%B4%ED%8A%B8%EB%A7%B5-SEO-%EA%B0%80%EC%9D%B4%EB%93%9C
Google Analytics
์น ์ฌ์ดํธ์ ๋ฐฉ๋ฌธ์ ํ๋๊ณผ ์ฑ๊ณผ๋ฅผ ์ถ์ ํ๊ณ ๋ถ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์น ๋ถ์ ๋๊ตฌ๋ก,
๋ฐฉ๋ฌธ์์ ํ๋ ๋ถ์, ์ฑ๊ณผ ์ธก์ , ๋ง์ผํ ํจ์จ์ฑ ํ๊ฐ, ์ปจํ ์ธ ์ต์ ํ, ์ฌ์ฉ์ ๊ฒฝํ ํฅ์ ๋ฑ์ ํ์ธํด ๋ณผ ์ ์๋ค๊ณ ํ๋ค.
Favicon
favicon ๋ํ SEO์ ์ํฅ์ ๋ฏธ์น๋ ์์์์ ํ์ธํ ์ ์์๋ค.