✨ CSR 은 서버에서 최소 HTML과 JS 번들만 내려주고, 브라우저가 실행해(즉, 클라이언트 사이드에서) 콘텐츠를 렌더링하는 방식.
🤖 초기 로딩 후 UX는 우수하지만, 검색 엔진 크롤러는 최소한의 HTML만 파싱하기 때문에 콘텐츠 인식에 어려움이 있다.
(크롤러는 엄청난 분량의 페이지를 하나하나 검증할 시간이 모자라서 초기 로딩 분량만 보고 가버린다. 그런데 CSR은 페이지를 렌더링 할 시간이 추가로 필요한데, 크롤러는 이를 주지않고 그냥 사라져버린다..)
🌐 이 문제에서 자유로는 것이 SSR/ SSG 기법. 서버나 빌드 시점에 HTML을 생성한다. 크롤러가 페이지를 방문하는 시점에서 렌더링이 이미 완료되어있으니 즉시 텍스트와 메타데이터를 수집할 수 있다.
3번과 관련해서.. 요새는 잘 보기 힘든데, 예전 홈페이지들은 특정 브라우저에서만 동작한다던지 / 특정 브라우저에 최적화되어있다는 문구가 있곤 했다.
주로 해당 페이지 개발에 사용된 특정 기술이 특정 브라우저에서만 호환되거나, 특정 브라우저에서는 동작하지 않기 때문인데..
2025년 시점에서 이런 식으로 홈페이지를 개발할 수는 없다. 어떤 브라우저에서도 동일한 사용자 경험을 줄 수 있어야한다.
예시: Next.js의
getServerSideProps
,getStaticProps
가장 간단한 방법. Next.js는 사실상 React.js나 다름 없으니.. 그냥 Next를 도입하는게 제일 좋다.
검색엔진 크롤러가 개량되면서 CSR 기반이라도 해서 아예 검색에서 깡통이 되는건 아니지만..
CSR 기법의 근본적인 한계로 인해서 SSR과 동일한 수준으로 검색 엔진에서 이점을 얻기는 힘들다.
크롤러에게만 SSR 버전, 일반 사용자에겐 CSR 버전 제공
구현: Nginx/Express에서 User-Agent
확인 → Rendertron 등 활용
단점: 인프라 복잡도↑, 유지보수 부담↑
이건.. 정말정말 특이한 상황에서 도입할 수 있는 방법. 일반적으로는 복잡도가 너무 높아지고 유지보수성이 너무 떨어진다.
<Head>
로 <title>
, <meta>
, Open Graph, JSON-LD 설정import Head from 'next/head';
export default function MyPage({ post }) {
return (
<>
<Head>
<title>{post.title}</title>
<meta name="description" content={post.excerpt} />
<script type="application/ld+json">
{JSON.stringify({
"@context": "https://schema.org",
"@type": "Article",
"headline": post.title,
"datePublished": post.date,
"author": { "@type": "Person", "name": post.author }
})}
</script>
</Head>
{/* 페이지 콘텐츠 */}
</>
);
}
요건 사실 SEO 문제가 아니더라도 HTML 개발시에 습관처럼 사용하면 좋다.
HTML에는 얼핏 같은 효과를 지니는 것 처럼 보이는 태그들이 많다.
잘 모르고 태그들을 다루다보면 그냥 div만 있어도 개발이 다 되는 것 처럼 보이는데.. (세부적인 스타일은 어차피 CSS에서 다루면 되니까)
각각에 부여된 역할에 맞는 태그를 사용해야 크롤러 등지에서 더 빠르게 페이지를 분석해서 페이지 최적화에 도움이 된다. 겉으로는 불필요해보여도 보이지 않는 곳에서 생각보다 많은 차이점이 발생하니 유의해야한다.
방안 | 장점 | 한계점 |
---|---|---|
SSR / SSG | 즉시 인덱싱, 빠른 FCP/LCP | 서버 부하↑, 빌드 시간↑ |
프리렌더링 | 간단 구현, 안정적 SEO | 경로 많아지면 빌드↑ |
동적 렌더링 | 빠른 도입, 크롤러 호환성 보장 | 인프라·비용↑, 비권장 장기책 |
메타 태그 관리 | CSR에서도 메타데이터 제공 가능 | 일관 적용 필요 |