노트

SEO

Search Engine Optimization

프런트엔드#html · 연결된 개념 5개

쉽게 말하면

SEO는 검색 엔진이라는 서점 직원이 내 책을 찾아내고, 무슨 내용인지 파악해서, 알맞은 손님에게 추천하게 돕는 일이에요. 표지 제목과 목차, 매장 안내도를 잘 붙여 두는 셈이죠.

비유가 깨지는 곳 서점 직원은 책을 바로 펼쳐 보지만 크롤러는 JS 실행을 미루거나 아예 안 하기도 해요. 그래서 본문과 메타 태그가 초기 HTML에 들어 있는 SSR·SSG가 CSR보다 안전해요.

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

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 역색인과 검색 엔진

    역색인(inverted index)은 "각 문서에 어떤 단어가 있나" 대신 거꾸로 "이 단어가 어느 문서들에 있나"를 미리 만들어 둔 자료구조다. 책 뒤의 찾아보기와 같다. OpenSearch·Elasticsearch 같은 검색 엔진은 이 구조로 전문 검색(full-text search)을 빠르게 한다.

  • 브라우저 안에서 도는 RAG 구현기

    서버·요금 없이 방문자 브라우저에서 EmbeddingGemma 2로 찾고 Gemma 4로 답하는 RAG를 이 사이트에 넣은 사례. 프론트엔드 개발자가 알아야 할 개념을 구현 순서대로 짚는다.

  • XSS

    XSS(Cross-Site Scripting)는 공격자가 넣은 스크립트가 내 사이트의 출처(origin) 권한으로 사용자 브라우저에서 실행되는 공격이다. 같은 출처의 코드로 돌기 때문에 same-origin-policy가 막아 주지 못한다. 그 스크립트는 페이지를 바꾸고, 로그인한 사용자 행세를 하며 요청을 보내고, JS가 읽을 수 있는 데이터(localStorage의 토큰 등)를 빼 갈 수 있다.

  • CSRF

    CSRF(Cross-Site Request Forgery, 사이트 간 요청 위조)는 로그인한 사용자가 악성 사이트를 방문했을 때, 그 사이트가 사용자의 브라우저를 시켜 사용자 모르게 원래 사이트에 요청을 보내게 하는 공격이다. 공격자는 토큰을 훔치지 않는다. 브라우저가 쿠키를 알아서 붙여 준다는 점을 이용한다.

  • RAG (검색 증강 생성)

    LLM이 답하기 직전에 관련 자료를 검색해 프롬프트에 넣어 주는 방식. 모델을 다시 학습시키지 않고도 모르는 지식에 근거한 답을 하게 한다.

보기 옵션