# [[React SEO Guide]] ## ๐ Brief Summary React SEO๋ React๋ก ๊ตฌ์ถ๋ ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA)์ ์ฝํ ์ธ ๋ฅผ ๊ฒ์ ์์ง ๋ด์ด ํจ๊ณผ์ ์ผ๋ก ํฌ๋กค๋ง, ๋ ๋๋ง ๋ฐ ์์ธํ ์ ์๋๋ก ์ต์ ํํ๋ ๊ณผ์ ์ ๋๋ค [1, 2]. ๊ธฐ๋ณธ์ ์ผ๋ก React๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง(CSR)์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฒ์ ์์ง์ด ์ด๊ธฐ ์์ฒญ ์ ๋น HTML ์ ธ๋ง ๋ณด๊ฒ ๋์ด ์์ธ ์ง์ฐ ๋ฐ ๊ฒ์ ๊ฐ์์ฑ ์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค [1, 3]. ์ด๋ฌํ ๊ตฌ์กฐ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๊ฐ๋ฐ์๋ค์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR) ๋ฐ ์ ์ ์ฌ์ดํธ ์์ฑ(SSG)๊ณผ ๊ฐ์ ๋ ๋๋ง ์ ๋ต์ ๋์ ํ๊ณ , ์ ์ ํ ๋ผ์ฐํ ๋ฐฉ์๊ณผ ๋์ ๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ํ์์ ์ผ๋ก ์ ์ฉํด์ผ ํฉ๋๋ค [4, 5]. ## ๐ Core Content - **ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง(CSR)์ ํ๊ณ:** React ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ JavaScript๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์คํํ ํ์์ผ DOM์ ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ๋ CSR ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค [3, 6]. ๊ตฌ๊ธ๋ด์ ์ด๋ฌํ ์ฌ์ดํธ์ ์ ๊ทผํ ๋ ๋น HTML ์ ธ์ ๋จผ์ ์์ธํ ํ JavaScript ๋ ๋๋ง์ ํ(Queue)์ ๋๊ธฐ์ํค๋ "๋ ๋จ๊ณ ์์ธ(two-wave indexing)" ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋ฉ๋๋ค [7-9]. ์ด๋ ์์ธ ์ง์ฐ, ํฌ๋กค๋ง ์์ฐ ๋ญ๋น, ๋ ๋๋ง ์๊ฐ ์ด๊ณผ๋ก ์ธํ ์ฝํ ์ธ ๋๋ฝ์ผ๋ก ์ด์ด์ง๋ฉฐ, ์กด์ฌํ์ง ์๋ ๊ฒฝ๋ก์ ๋ํด 404 ์ํ ์ฝ๋ ๋์ 200 OK๋ฅผ ๋ฐํํ๋ "์ํํธ 404(Soft 404)" ๋ฌธ์ ๋ฅผ ์ ๋ฐํ๊ธฐ๋ ํฉ๋๋ค [7, 9, 10]. - **SEO ์ต์ ํ๋ฅผ ์ํ ํต์ฌ ๋ ๋๋ง ์ ๋ต:** - **์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR):** ์๋ฒ์์ ๋งค ์์ฒญ๋ง๋ค ์ ์ฒด HTML์ ์์ฑํ์ฌ ์ ์กํจ์ผ๋ก์จ ํฌ๋กค๋ฌ๊ฐ ๋๊ธฐ ์๊ฐ ์์ด ์ฆ์ ์ฝํ ์ธ ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ธ์ํ๊ฒ ํฉ๋๋ค(Next.js, Remix ๋ฑ ํ์ฉ) [5, 11, 12]. - **์ ์ ์ฌ์ดํธ ์์ฑ(SSG):** ๋น๋ ์์ ์ HTML์ ์ฌ์ ๋ ๋๋งํ์ฌ ์ด๊ณ ์ ๋ก๋ฉ๊ณผ ์๋ฒฝํ ํฌ๋กค๋ง ํ๊ฒฝ์ ์ ๊ณตํ๋ฉฐ, ๋ธ๋ก๊ทธ๋ ๋ฐฉ๋ฌธ ํ์ด์ง ๋ฑ ์ ์ ์ฝํ ์ธ ์ ์ด์์ ์ ๋๋ค [13, 14]. - **์ ์ง์ ์ ์ ์ฌ์์ฑ(ISR):** SSG์ ๋น ๋ฅธ ์๋์ SSR์ ๋ฐ์ดํฐ ์ต์ ์ฑ์ด๋ผ๋ ์ฅ์ ์ ๊ฒฐํฉํ์ฌ, ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ์ ํ์ด์ง๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค [14, 15]. - **๋ฉํ๋ฐ์ดํฐ ๋ฐ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ:** React ์ฑ์ ํ์ด์ง๊ฐ ์ ํ๋ ๋ `
` ํ๊ทธ๊ฐ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋์ง ์์ผ๋ฏ๋ก `react-helmet-async` ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Next.js์ `` ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ธ ์ ๋ชฉ, ์ค๋ช , Open Graph ํ๊ทธ๋ฅผ ๋ช ์์ ์ผ๋ก ์ฃผ์ ํด์ผ ํฉ๋๋ค [16, 17]. ๋ํ ๊ฒ์ ๊ฒฐ๊ณผ(Rich Snippets)์ ํจ๊ณผ์ ์ผ๋ก ๋ ธ์ถ๋๊ณ AI ๋ด์ด ์ฝํ ์ธ ์ ๋ฌธ๋งฅ์ ์ดํดํ ์ ์๋๋ก JSON-LD ๊ธฐ๋ฐ์ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ(Schema Markup)๋ฅผ ๋ฐ๋์ ์ถ๊ฐํด์ผ ํฉ๋๋ค [16, 18, 19]. - **React Router ๋ฐ ๋ด๋ถ ๋งํฌ ์ต์ ํ:** ํด์ ๊ธฐ๋ฐ ๋ผ์ฐํ (`#/`)์ ๊ฒ์ ์์ง์ด ํด์ ์ดํ์ URL์ ํ๋์ ํ์ด์ง๋ก ์ทจ๊ธํ์ฌ ๋ฌด์ํ๋ฏ๋ก, HTML5 History API๋ฅผ ํ์ฉํ๋ `BrowserRouter`๋ฅผ ํตํด ๊น๋ํ๊ณ ๊ฐ๋ณ ์์ธ์ด ๊ฐ๋ฅํ URL ๊ตฌ์กฐ๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค [16, 20, 21]. ๋๋ถ์ด ๊ตฌ๊ธ๋ด์ ์ํํ ํฌ๋กค๋ง์ ์ํด ๋ด๋น๊ฒ์ด์ ๋์ ์ `onClick` ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋์ ํ์ค `` ๋๋ `` ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค [21, 22]. - **์ฝ์ด ์น ๋ฐ์ดํ(Core Web Vitals) ์ฑ๋ฅ ํ๋:** ๋ฌด๊ฑฐ์ด JavaScript ๋ฒ๋ค๊ณผ ํด๋ผ์ด์ธํธ ์ธก ํ์ด๋๋ ์ด์ (Hydration) ์ง์ฐ์ LCP(Largest Contentful Paint)์ INP(Interaction to Next Paint) ์ ์๋ฅผ ์ฌ๊ฐํ๊ฒ ์ ํ์ํต๋๋ค [22, 23]. ์ด๋ฅผ ์ต์ ํํ๊ธฐ ์ํด์๋ ๋ผ์ฐํธ ๊ธฐ๋ฐ ์ฝ๋ ๋ถํ (Code Splitting), ์ปดํฌ๋ํธ ์ง์ฐ ๋ก๋ฉ(Lazy Loading) ๋ฐ ๋ถ๋ถ ํ์ด๋๋ ์ด์ (Partial Hydration) ๊ธฐ๋ฒ์ ์ ์ฉํ์ฌ ์ด๊ธฐ ๋ก๋ ๋ถ๋ด์ ์ค์ฌ์ผ ํฉ๋๋ค [24, 25]. ## ๐ Knowledge Connections - **Related Topics:** [[Server-Side Rendering (SSR)]], [[Core Web Vitals]], [[Single Page Applications (SPA)]], [[Client-Side Rendering (CSR)]], [[React Router]] - **Projects/Contexts:** [[Next.js]], [[Remix]], [[Create React App]] - **Contradictions/Notes:** ๋์ ๋ ๋๋ง(Dynamic Rendering)์ ๋ด์๊ฒ๋ ์ฌ์ ๋ ๋๋ง๋ HTML์, ์ค์ ์ฌ์ฉ์์๊ฒ๋ ํด๋ผ์ด์ธํธ ์ธก ๋ ๋๋ง์ ์ ๊ณตํ๋ ์ฐํ ๊ธฐ๋ฒ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ง๋ง, 2026๋ ๊ธฐ์ค ๊ตฌ๊ธ์ ์ด ๋ฐฉ์์ด ๋ด๊ณผ ์ฌ๋์๊ฒ ๋ค๋ฅธ ์ฝํ ์ธ ๋ฅผ ๋ณด์ฌ์ฃผ๋ "ํด๋กํน(Cloaking)"์ผ๋ก ๊ฐ์ฃผ๋ ์ํ์ด ์์ด ๊ธฐ๋ณธ ์ ๋ต์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํ์ง ์์ต๋๋ค [26, 27]. --- *Last updated: 2026-04-26*