SEO(Search Engine Optimization)는 검색 엔진이 페이지를 잘 찾고(크롤링, crawling), 이해해서 저장하고(색인, indexing), 알맞은 검색어로 노출하도록(순위, ranking) 사이트를 다듬는 일이다. 개발자가 맡는 부분은 대부분 앞의 두 단계, 즉 "검색 엔진이 읽을 수 있게 만드는 것"이다.
찾게 하기: 크롤링
robots.txt: 크롤러가 접근하지 않기를 바라는 경로를 적어 두는 파일이다. 강제력은 없는 요청이고, 색인을 막는 장치도 아니다. 막힌 URL도 다른 곳에서 링크되면 검색 결과에 뜰 수 있다. 색인을 막으려면noindex를 쓴다. 이때 robots.txt로도 막으면 크롤러가noindex를 읽지 못하므로 robots.txt에서는 열어 둔다sitemap.xml: 크롤링할 URL 목록을 직접 알려 준다. 새 사이트나 링크가 적은 페이지에 특히 쓸모 있다- 페이지 사이를 진짜
<a href>링크로 잇는다. 클릭 이벤트로만 이동하면 크롤러가 따라가지 못한다
이해하게 하기: 색인
<title>과<meta name="description">: 검색 결과의 제목과 설명이 된다. 페이지마다 다르게 쓴다- 시맨틱 마크업: 제목은
h1~h6로, 본문 구조는main·article·nav로 표시하고, 이미지에는 내용을 설명하는alt를 단다. 접근성을 챙기면 SEO도 함께 좋아진다 <link rel="canonical">: 같은 내용이 여러 URL(쿼리 파라미터, 정렬 옵션)에 있을 때 대표 URL을 알린다- 구조화된 데이터(Structured Data, JSON-LD): 상품 가격·리뷰 별점 같은 정보를 기계가 읽는 형식으로 넣어 검색 결과에 더 풍부하게(리치 결과, Rich Results) 표시될 수 있게 한다
- Open Graph(
og:title,og:image)는 검색 엔진보다 메신저·SNS 링크 미리보기용이다. Next.js에서는 generateMetadata로 페이지마다 만든다
렌더링 방식과 SEO
Google 크롤러는 JS를 실행해 렌더링하지만, 렌더링은 크롤링보다 늦게 대기열에서 처리되고 모든 검색 엔진·미리보기 봇이 JS를 실행하지는 않는다. 그래서 초기 HTML에 본문과 메타 태그가 이미 들어 있는 SSR·SSG가 CSR보다 안전하다 → CSR·SSR·SSG·ISR, CSR bailout. Google은 Core Web Vitals를 포함한 페이지 경험도 순위 시스템에서 고려한다고 밝힌다.
LLM(Large Language Model) 에이전트에게 사이트를 안내하는 비슷한 시도로 llms.txt가 있다.
명세: RFC 9309 — Robots Exclusion Protocol · sitemaps.org — Sitemap 프로토콜 · RFC 6596 §3 — The Canonical Link Relation · WHATWG HTML — meta name=description · schema.org 출처: Google Search Central — SEO Starter Guide · Google Search Central — JavaScript SEO basics