์ค๋์ HTML์ ๊ธฐ๋ณธ SEO ์ ๋ํด ์์๋ณด๋ ค๊ณ ํ๋ค.
์ฌ์ ๋ ๋ช์ผ ์ ์ ๋ด๊ฐ TITLE ๋ ์ ๋ฐ๊พธ๊ณ ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฆด๋ปํ ์ ์ด ์์ด์
๋๋ HTML์ H๋ ๋ชจ๋ฅด๋๊ตฌ๋ ๋ผ๊ณ ๊นจ๋ฌ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋์ฐธ์ฌ๋ ๋์น๊ป ๋ง์๋์ง๋ง..
๋ํ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ์๊ธฐ ์น์ฑ ๐ถ์ ๋ณด๋ค์ถ์ด ๋งํฌ๋ฅผ ์ถ๊ฐํด๋ ์๋ฌด๋ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ ๊ณตํด์ฃผ์ง ์๋๋ค.
๋ ธ์ ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ํ์ฐธ ๋ก๋ฉ์ด ๊ฑธ๋ฆฌ๋ค๊ฐ - ๊ทธ๋ฅ ๋งํฌ ์ด๋ฆ๋ง ๊ฑธ์ด์ค๋ค ๐ฅ
๋๊ฐ ์ด๋ฐ ๋๋์ด๋ค.. ์ฝฉ์ง์ผ.. ๋ ๋์ด์ ์๋๊ฐ์จ ๐ธ
์ด ์ด์ ์ ๋ํด์๋ ์ฌ๊ฐํ ๊ฑด ์๋๊ณ ์์ฃผ ๊ฐ๋จํ๊ฒ
HTML ๊ธฐ๋ณธ SEO์ ๋ํด ์๋ฉด ํด๊ฒฐํ ์ ์๊ฒ ๋๋ค.
๐ต๐ต๐ต
์ฐ์
0. SEO ๋?
Search Engine Optimization์ ์ฝ์๋ก, ๊ฒ์์์ง์ต์ ํ ๋ฅผ ์๋ฏธํ๋๋ฐ,
์น ์ฌ์ดํธ์ ์นํ์ด์ง๋ฅผ ๊ฒ์์์ง์ด ์ฝ๊ฒ 1) ๋ฐ๊ฒฌ(discovery)ํ๊ณ , 2) ์ฝ์ด๊ฐ์(crawling), 3) ์์ธํ๊ณ (indexing), 4) ์์ ๋ ธ์ถ(ranking)์์ผ ์์ฐ ์ ์ ๋๋ ํธ๋ํฝ์ ์๊ณผ ์ง์ ๋์ผ ์ ์๋๋ก ๊ด๋ จ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ํน์ฑ์ ๊ณ ๋ คํด์ ์น์ฌ์ดํธ์ ๊ตฌ์กฐ๋ ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ํ๋ ์ผ๋ จ์ ์์ ์ ๋งํ๋ค๊ณ ํ๋ค.
๋ฌด์กฐ๊ฑด ์ฝ๊ฒ ๋ฐ๊ฒฌํ๊ณ ์ฝ์ด๊ฐ๊ฒ ํ๋ ๊ทธ๋ฐ ๋์ฃผ๊ณ ์ฌ๋ ํ์๋ญํน๋งํฌ ๊ฐ์ ๋๋์ด ์๋๋ผ
๊ฒ์ ์ด์ฉ์์ ๊ฒ์ ์๋์ ์ ๊ตํ๊ฒ ์ ๋ง์ถ ์ฝํ
์ธ ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์ง์คํ๋ค ๋ ๋ง์ด ๊ฒ์์์ง์ต์ ํ(SEO)์ ๊ฐ์ฅ ์ค์ํ ํต์ฌ ํฌ์ธํธ ์ผ ๊ฒ์ด๋ค. (์๋ง๋)
0-1. SEO ์ ์์
์น์ฌ์ดํธ ๋ด์ธ์ ๋ฐ๋ผ ์จํ์ด์ง SEO ์ ์คํํ์ด์ง SEO๊ฐ ์๋ค.
- ์จํ์ด์งSEO : ์น์ฌ์ดํธ ๋ด์ ์๋ HTML์์, SERVER์์, ํต์ฌ ๋ฐ ์ฐ๊ดํค์๋๋ฅผ ๋์์ผ๋ก ํ๋ค.
- ์คํํ์ด์ง SEO : ์น ์ฌ์ดํธ ๋ฐ์์ ํ๋์ ํ๋ ์์ ๋ฏธ๋์ด, ํ ์น์ฌ์ดํธ ๋งํฌ ๋ฑ์ ๋งํ๋ค.
1) ํ ํฌ๋์ปฌSEO(Technical SEO) : ์น์ฌ์ดํธ ์๋, ๊ตฌ์กฐ ์ธ๋ฑ์ฑ, ํ๊น , ์คํค๋ง ๋ฑ ์น ๊ฐ๋ฐ์ ๊ด๋ จ๋ ์์ญ
2) ์จ ํ์ด์งSEO(On-page SEO) : ํ์ด์ง์ ๊ตฌ์ฑ์์์ ์์ฑ๋, ์ฆ '๊ธ(ํค์๋)'์ ํ๋ฆฌํฐ์ ๊ด๋ จ๋ ์์ญ
3) ์คํํ์ด์งSEO(Off-page SEO) : ๋ด ์น์ฌ์ดํธ ์ธ๋ถ ์์ญ, ํ ์ฌ์ดํธ์์ ๋ด ์ฌ์ดํธ๋ฅผ ์ด๋ป๊ฒ ํ๊ฐํ๊ณ ์ ๋ขฐํ๋์ง (domain authority) (์ธ๋ถ์ฌ์ดํธ์์ ๋ด ํ์ด์ง๋ฅผ ์ผ๋งํผ ๋งํฌ๋ก ๊ฑธ์ด์ฃผ๋์ง)์ ๊ดํ ์์ญ
๋๋จธ์ง๋ ๋์์ด๋๋.. ๋ญ ๋ฑ๋ฑ ์ฌ๋๋ค์ด ํ๊ฒ ์ง..
๋๋ ํ
ํฌ๋์ปฌSEO๋ฅผ ์ค์ ์ผ๋ก ๋ค๋ฃฐ ์๊ฐ์ด๋ค.
1. ํ ํฌ๋์ปฌSEO
1.1 ์ ๋ชฉ(Title/ํ์ดํ) ํ๊ทธ
์นํ์ด์ง์ ๊ณ ์ ์ ๋ชฉ์ด๋ฉฐ ๊ฒ์์์ง์ด ์นํ์ด์ง๋ฅผ ์ฝ์ ๋ ๊ฐ์ฅ ๋จผ์ ์ฝ๋ ๋ด์ฉ
1) ์น๋ธ๋ผ์ฐ์ ํญ ๋ฉ๋ด์์ ๋ณด์ฌ์ง๋ฉฐ 2) ๊ตฌ๊ธ ๋ค์ด๋ฒ ๊ฒ์๊ฒฐ๊ณผ ์ ๊ฒ์๊ฒฐ๊ณผ์ ์ ๋ชฉ ์ ์๋ฏธํ๋ค.
<title></title>
์ ํด๋นํ๋ ๋ถ๋ถ์ด๋ค.
1.2 ์นํ์ด์ง ์์ฝ์ค๋ช (Meta Description, ๋ฉํ๋์คํฌ๋ฆฝ์ )
์์ฑ ๊ธธ์ด์ ๊ธฐ์ค๋ ์๋ค๋๋ฐ.. 1) ๊ตฌ๊ธ์ 160์ ๋ฏธ๋ง, 2) ๋ค์ด๋ฒ๋ 80์ ๋ฏธ๋ง
<meta name="description" content="์ค๋ช
์ฐ์ผ">
์ด๋ฐ ์์์ด๊ณ
์ด๋ ๊ฒ ๋จน์ด๋ฉด ๋๋ค.
1.3 ์ ๋ชฉํ๊ทธ(Heading Tags, h1~h2)
HTML ๊ตฌ์กฐ์์ ์ ๋ชฉ, ์์ ๋ชฉ ๋ฐ ๋จ๋ฝ์ ๊ธฐ์ ํ๋ ๊ฐ๋
์น๋ฌธ์๋ฅผ ์ก์์ฃผ๋ '๊ธฐ๋ณธ์ ์ธ ๊ณจ๊ฒฉ'์ผ๋ก ์น๋ถ๋๊ธฐ ๋๋ฌธ์ SEO ์ต์ ํ์ ๊ฐ์ฅ ์ค์ํ ์์ ์ค ํ๋.
[ ์ฐธ๊ณ ]
1) ํ์ด์ง์ ๊ตฌ์กฐ๋ฅผ ํฌ๊ธฐ์์ผ๋ก ๋ฐฐ์นํ๋ ๊ฒ์ด ์ค์ํ๋ฉฐ
2) H1 → H2 ํ๊ทธ์ ์์ผ๋ก ํฌ๊ธฐ์ ์ค์๋๊ฐ ๋ฎ์์ง๋ค
3) ๊ทธ๋ฐ ์๋ฏธ๋ก H1 ํ๊ทธ๋ ๊ฐ์ฅ ํฐ ์ ๋ชฉ(๋์ฃผ์ ) ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ์ ์ฉํด์ผ ํ๋ค.
3-1) H1์ 1๊ฐ, H2๋ 3๊ฐ๊น์ง๋ง ์์ฑํ๋ ๊ฒ์ด ํค์๋ ๋ฐ๋์ ์ ์ผ ์ข๋ค๊ณ ํ๋ค.
์ด์ธ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์กด์ฌํ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ ์ ๋ฃ ์๋น์ค๋ฅผ ์ด์ฉํ๋ผ๋ ์๋ฏธ ๊ฐ๊ณ ,
๊ฐ๋ฐ์์ ์์ญ์ด ์๋๊ธฐ์ ํจ์คํ๋ค.
1.4 ์น์ฌ์ดํธ ๋ด ๋งํฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
* Naver ๋ธ๋ก๊ทธ, ์นด์นด์คํก ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ค์
<meta property="og:title" content="..."> : ์ฝํ
์ธ ์ ๋ชฉ
<meta property="og:url" content="..."> : ์นํ์ด์ง URL
<meta property="og:type" content="..."> : ์นํ์ด์ง ํ์
(blog, website ๋ฑ)
<meta property="og:image" content="..."> : ํ์๋๋ ์ด๋ฏธ์ง
<meta property="og:site_name" content="..."> : ์น์ฌ์ดํธ ์ด๋ฆ(URL๊ณผ ๋ค๋ฆ)
<meta property="og:description" content="..."> : ์นํ์ด์ง ์ค๋ช
(์ ๋ชฉ ์๋์ ํ์)
*ํธ์ํฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ค์
<meta name="twitter:card" content="..."> : ํธ์ํฐ ์นด๋ ํ์
(์์ฝ์ ๋ณด, ์ฌ์ง, ๋น๋์ค)
<meta name="twitter:title" content="..."> : ์ฝํ
์ธ ์ ๋ชฉ
<meta name="twitter:description" content="..."> : ์นํ์ด์ง ์ค๋ช
<meta name="twitter:image" content="..."> : ํ์๋๋ ์ด๋ฏธ์ง
๋๋จธ์ง๋ ์๋น์ค ์์ญ์ด๊ธฐ์
์ฐ๋ฆฌ ๊ฒ์ํ ๐ถ์ ๋จน์ผ ํ์๊ฐ ์ ๋ง ํ์๊ฐ ์์ด๋ณด์ฌ์...
์ถ๊ฐ๋ก ์ฐธ๊ณ ํ๊ณ ์ถ์ผ๋ฉด
๋ฅผ ์ฐธ๊ณ ํ๋๋ก ํ์.
์ธ์ค ์์์ผ๋... ์ธ์.. ์ฝ๊ฒ๋ง ์ด์๊ฐ๋ฉด ์ฌ๋ฏธ์์ด ๋น๊ณ
1.4 ๋ด์ฉ์ ๋จน์ด๊ณ ์ npm run build ๋ฅผ ํ๋๊น html์ด ์ ์ฉ๋๊ธฐ๋ ์ปค๋
์ฝ๋๋ง์ ์น ์ง์์ ธ๋ฒ๋ฆฐ๋ค
๐ต๐ต๐ต
์ด์ด๊ฐ ์๋ค..
2. React์์ SEO ๋จน์ด๋ ๋ฒ
๋ค์ ์์ํ๋๋ก ํ๋ค.
1. pre-rendering
2. server side rendering
๋ ๊ฐ์ง์ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
์ค๋ช
์ ๊ฐ๋จํ๊ฒ ๋ค ์ ์ด ๋ ๊ฒ์ด๋
1) ๋๋ next.js ๋ฅผ ์ฌ์ฉํ์ง ์์๊ณ 2) ๋์ ์ผ๋ก url์ ๋ํ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋ค๋ฅด๊ฒ ์ ๊ณตํด์ค ํ์๊ฐ ์๋ค. (์๋๋ฉด ๋ก๊ทธ์ธ์ ์ํ์ ๋๋ ๋ฉ์ธ ๋ฐ์ ๋ชป ๋ค์ด๊ฐ๋๋ฐ๋ค๊ฐ ์ฌ์ธ๋ง์์๋ ์ ์์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์)
๊ณ ๋ก Pre-rendering ๋ฐฉ๋ฒ์ ์ฑํํด๋ณด๋๋ก ํ ๊ฒ์ด๋ค.
๋๋ถ๋ถ react๋ก ๊ฐ๋ฐํ ๊ฒฝ์ฐ์๋ 1.Pre-Rendering ์ ์ฑํํ๊ณ ์๋๋ผ ์ฐธ๊ณ
1. Pre-Rendering
๋น๋๋ฅผ ํ ๋ ๋ฏธ๋ฆฌ ํน์ ํ์ด์ง๋ฅผ ๋ ๋๋ง ํด์ html ํ์ผ์ ๋ง๋ค์ด ๋๋ ๋ฐฉ๋ฒ
๊ฒ์ ์์ง์ด ํฌ๋กค๋งํ๋ฌ ์ฌ์ดํธ์ ๋ค์ด์์ ๋, ๋น html ๋์ ๋ด์ฉ์ ๊ฐ์ ธ ๊ฐ ์ ์๊ฒ..!
react-snap ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด์ ํด๋น ๋ผ์ฐํ
๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋์ ํ์ด์ง์๋ ์ ์ฉํ๊ธฐ๊ฐ ํ๋ค์ด๋ณด์ธ๋ค๋ ์ด์ผ๊ธฐ๊ฐ ์์...
๊ธฐ๋ณธ ๋ฉํ๋ฐ์ดํฐ(Meta Data) ๋ ์์ ๋์ผ
<head>
......
<meta property="og:title" content="์ ๋ชฉ"/>
<meta property="og:type" content="๋ฐ์ดํฐ์ ํ์
(article, website, image...)"/>
<meta property="og:url" content="์ฌ์ดํธ ์ฃผ์"/>
<meta property="og:description" content="๋ฐ์ดํฐ์ ๋ํ ์ค๋ช
"/>
<meta property="og:image" content="๋ฐ์ดํฐ์ ์ธ๋ค์ผ/์ด๋ฏธ์ง ์ฃผ์"/>
......
</head>
1. react-snap ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
react-snap์ puppeteer ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ HTML ํ์ผ๋ค์ pre-rendering ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋น์ทํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก๋ react-snapshot ๋ฑ์ด ์๋จ๋ค. ํ์ง๋ง snap์ด ๋ ๋ค์ด๋ก๋ ์๊ฐ ๋ง์ผ๋๊น ์ ๋ ๋ค์๋ฅผ ๋ฐ๋ผ๋ณด๋๋ก ํ๋ค.
npm i react-snap -D
์ค์น๋ฅผ ์ฐ์ ํด์ฃผ๋๋ก ํ์. ๊ฐ๋ฐํ๊ฒฝ์์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ devDependency๋ก ์ค์น๋ฅผ ํด์ค์ผํ๋จ๋ค.
app.js ์์ ๋ผ์ฐํฐ ์ค์ ์ ํด์ฃผ๊ณ
npm run build
๋ฅผ ํ๋ฉด ์์์ build ์ชฝ์
์ด๋ ๊ฒ ํด๋๊ฐ ์๊น...
ps. ์ถ๊ฐํ๊ณ ์ถ๊ฑฐ๋ ์ ๊ฑฐํ๊ณ ์ถ์ ๋ถ๋ถ์ด ์์ผ๋ฉด build ๋๋ฆฌ๊ธฐ ์ ์ include๋ exclude ์ต์ ์ ์ค๋ฒ๋ฆฌ๋ฉด ๋๋ค...
// package.json
...
"reactSnap":{
"include":[
"/"]
}
2. hydrate ์ค์
// src/index.js
import React from 'react';
import { hydrate, render } from 'react-dom';
import App from './App';
const $root = document.getElementById('root');
const renderOrHydrate = $root.hasChildNodes() ? hydrate : render;
renderOrHydrate(<App />, $root);
์ค์ ์ ์ฌ๊ธฐ๊น์ง
3. TEST ํ ์คํธ
3.1 Build ๋น๋
npm run build
ํฐ๋ฏธ๋์์ ๋น๋๋ฅผ ํด์ฃผ๋ฉด
๋ฌด์จ ํ์ด์ง๋ค์ ํฌ๋กค๋งํด์ค๋์ง๋ ํ์ธํ ์ ์๋ค
4. ๋ธ๋ผ์ฐ์ ์์ ํ์ธ
npx serve build
๋ฅผ ํด์ฃผ๊ณ ,
๊ฐ๋ฐ์ ๋๊ตฌ์ Networkํญ-Doc ์
pre-rendering ํ ํ์ด์ง๋ค์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ๋ณด์ด๋ฉด ์ ์ ์๋์ด ๋๊ฑฐ๋ผ๊ณ ํ๋ค.
2. Server Side Rendering
๋์ ํ์ด์ง์ ๊ฒฝ์ฐ server side rendering์ ๋ง์ด ์ฌ์ฉํ๋๋ฐ...
server side rendering์ ๊ฒฝ์ฐ์๋ next.js์ ํฐ ์ฅ์ ์ค์ ํ๋๊ธฐ ๋๋ฌธ์
next.js ๋ก ๊ฐ๋ฐ์ ํ์ผ๋ฉด ์๊ด์ด ์๋๋ฐ... ์๋ ๊ฒฝ์ฐ์๋ next.js๋ก ๋ง์ด๊ทธ๋ ์ด์
์ ํด์ค์ผํ๋จ๋ค.
์์ธํ ๋ฐฉ๋ฒ
React๋ก Next.js ์ฒ๋ผ Server-side-rendering ๊ตฌํํ๊ธฐ
React์์ SNS ๊ณต์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, SEO ์ ์ฉ ๋ฐฉ๋ฒ
์ด ๋ฐฉ๋ฒ์ ์ฑํํ๋ค๋ฉด ์ ๋งํฌ๋ฅผ ๋ฐ๋ผ๊ฐ ๋ฐ๋ผํด๋ณด๋๋ก ํ์.
์ด๊ฑฐ ํ๋ฉด์ ๋๋ ๊ฑฐ์ง๋ง ์ธ์์๋ ๋ฅ๋ ฅ์๋ค์ด ๋ง๋ค...
๊ณต์ ๋ฌธ์๊ฐ ๋ฉ์ถ๊ฑฐ๋ ์ง์์ด ๋ฉ์ถ๊ฑฐ๋, ํน์ ์ํ๋ ๊ธฐ๋ฅ์ด ์๋ค๊ณ
์ํ๋ ํ์ฅ ํด์ ๊ทธ๋ฅ ๋๋ฑ ๋ง๋ค์ด๋ฒ๋ฆฌ๋ ์ฌ๋๋ค์ด ๊ฝค ์๋๋ผ
์ ๊ธฐํ๋ค ์ ๊ธฐํด ๋๋... ๋ฐ์ชฝ์ง๋ฆฌ ๊ฐ๋ฐ์ ~