기술 SEO

기술 SEO 기초: 중요한 페이지의 크롤링, 색인 생성, 내부 연결 점검

유용한 콘텐츠를 발견할 수 있는 경로를 만들고 Google이 실제로 처리한 내용을 확인합니다.

중요한 페이지가 연결된 가지를 강조한 3단계 사이트 트리.

기술 SEO는 검색엔진이 사용자에게 보여 주려는 페이지를 발견하고 가져오며 이해할 수 있게 합니다. 접근 가능한 URL, 정확한 상태 코드, 일관된 색인 신호부터 확인한 뒤 유용한 탐색 구조로 페이지를 연결합니다. 페이지가 빨라도 표준 URL이 잘못되었거나 실수로 noindex가 설정되면 기본적인 노출 문제가 남습니다.

이 가이드는 개발자와 사이트 운영자를 위한 기초이며 검색 순위를 보장하지 않습니다. 검색 노출은 콘텐츠와 관련성에도 달려 있습니다. 여기서 확인할 목표는 더 구체적입니다. 의도한 페이지가 의도한 콘텐츠를 반환하고 페이지의 정체성과 목적을 나타내는 신호가 서로 일치해야 합니다.

발견, 크롤링, 색인 생성, 순위 결정을 구분합니다

발견은 검색엔진이 링크나 사이트맵 등을 통해 URL의 존재를 알게 되는 과정입니다. 크롤링은 해당 URL을 가져오는 작업입니다. 렌더링은 JavaScript를 실행해 후속 처리에 사용할 콘텐츠를 만들 수 있습니다. 색인 생성은 콘텐츠를 분석하고 색인에서 어떻게 표현할지 판단하는 과정입니다. 순위 결정은 나중에 검색어에 맞는 결과를 선택하고 정렬하는 단계입니다.

각 단계는 다릅니다. 사이트맵에 포함된 URL이 즉시 크롤링되는 것은 아니며 정상적으로 가져온 페이지도 반드시 색인에 포함되지는 않습니다. 색인된 페이지가 원하는 검색어에 나타난다는 보장도 없습니다. 관련 없는 설정을 바꾸기 전에 어느 단계까지 증거가 있는지 확인합니다.

홈페이지, 카테고리, 문서나 상품, 페이지 나누기, 언어 변형, 리디렉션, 없는 페이지처럼 대표적인 템플릿을 고릅니다. 개별 사례와 이를 생성하는 규칙을 함께 확인합니다. 홈페이지 하나가 정상이라고 매개변수가 붙은 수천 개 URL까지 올바르다고 판단할 수는 없습니다.

각 사례의 예상 상태, 색인 가능 여부, 표준 URL, 내부 링크 출처를 기록합니다. 이를 HTTP 응답과 Search Console 정보에 비교합니다. 이런 작은 목록은 각 URL의 역할을 결정하지 않은 채 수많은 경고만 모아 놓는 것보다 유용합니다.

robots.txt는 크롤링 제어에 사용합니다

robots.txt는 이를 지원하는 크롤러가 어떤 리소스를 요청할 수 있는지 안내합니다. 방문자를 인증하거나 기밀 콘텐츠를 보호하지는 않습니다. 차단된 URL도 링크를 통해 알려질 수 있습니다. 가져오기를 막으면 Google은 페이지 안의 지시문도 읽을 수 없습니다.

다음 루트 robots.txt 예제는 내부 검색 경로를 차단하고 사이트맵을 선언합니다.

text
User-agent: *
Disallow: /internal-search/
Sitemap: https://example.com/sitemap.xml

모든 검색 URL을 차단하라는 일반적인 권고는 아닙니다. 해당 페이지에 크롤링 제어, 색인 제외, 다른 URL 전략 중 무엇이 필요한지 결정합니다. noindex로 페이지를 제외하려면 Google이 해당 지시문을 가져올 수 있어야 합니다. 먼저 차단하면 필요한 확인 자체가 불가능해질 수 있습니다.

공개 콘텐츠 렌더링에 필요한 CSS, JavaScript, 이미지는 차단하지 않습니다. 오래된 자산 디렉터리용 규칙이 배포 후 현재 템플릿에 영향을 줄 수 있습니다. 검사 중인 정확한 호스트, 프로토콜, 경로를 확인하고 넓은 와일드카드가 의도하지 않은 리소스까지 포함하는지 살펴봅니다.

기밀 자료에는 적절한 접근 제어를 사용합니다. 공개적으로 이용할 수 있지만 검색에는 나오지 않아야 하는 페이지에는 색인 지시문을 사용합니다. Google은 크롤링 가능한 페이지의 head에서 다음 메타 태그를 지원합니다.

html
<meta name="robots" content="noindex">

X-Robots-Tag 응답 헤더는 HTML뿐 아니라 PDF 같은 리소스에도 색인 지시문을 적용할 수 있습니다. 헤더와 마크업을 함께 확인합니다. 서로 충돌하는 지시문 때문에 태그 하나만 봤을 때보다 더 제한적인 결과가 나올 수 있습니다. 기본적으로 색인이 허용되므로 모든 페이지에 index 태그를 넣을 필요는 없습니다.

상태 코드가 실제 결과를 설명하게 합니다

서버 응답은 유용한 콘텐츠, 이동한 페이지, 없는 페이지, 일시적 서비스 오류를 구분해야 합니다. 모든 경로에 동일한 앱 셸을 성공 응답으로 반환하면 JavaScript가 실행될 때까지 차이가 숨겨질 수 있습니다. 디버깅과 검색 처리 모두에 불필요한 일이 생깁니다.

다음 표는 판단을 돕는 기준이며 애플리케이션의 HTTP 동작을 대체하지 않습니다.

상황 일반적인 응답 확인할 내용
유용한 페이지가 존재함 200 본문에 예상한 콘텐츠가 있는지
같은 콘텐츠가 영구 이동함 301 또는 308 목적지가 적절한 대체 페이지인지
일시적으로 이동함 302 또는 307 임시 동작이 의도한 것인지
콘텐츠가 없거나 삭제됨 404 또는 410 무관한 성공 페이지로 대체하지 않는지
일시적 서버 문제 적절한 5xx 모니터링으로 장애를 감지하고 해결하는지

오류 메시지만 담은 200 응답은 소프트 404로 처리될 수 있습니다. 응답은 그대로 두고 문구만 바꿔도 근본적인 불일치는 해결되지 않습니다. 삭제한 모든 상품과 문서를 홈페이지로 보내는 것도 각각에 적절한 대체 페이지를 만드는 일이 아닙니다.

최종적으로 대응하는 URL로 직접 리디렉션하는 편이 좋습니다. 리디렉션 체인은 요청을 추가하고 테스트를 어렵게 하며 규칙 충돌 가능성을 늘립니다. 쿼리 문자열, 기존 후행 슬래시 규칙, HTTP에서 HTTPS로의 전환을 점검합니다. 과거 URL이 여전히 알맞은 콘텐츠를 제공한다면 유지합니다. 디자인 변경만으로 주소를 바꿀 필요는 없습니다.

작은 메타데이터 개선보다 지속적인 서버 오류를 먼저 조사합니다. 서버 응답 시간 개선 가이드는 방문자와 안정적인 가져오기에 모두 영향을 주는 원본 서버 지연과 전달 문제를 구분합니다.

표준 URL을 링크와 리디렉션에 맞춥니다

표준화는 중복되거나 매우 비슷한 페이지 중 선호하는 대표를 지정합니다. canonical 선언은 다른 모든 증거를 무시하는 명령이 아니라 신호입니다. 콘텐츠와 신호가 다른 주소를 가리키면 Google이 다른 표준 URL을 선택할 수 있습니다.

다음 HTML은 예시 가이드의 의도한 표준 URL을 선언합니다.

html
<link rel="canonical" href="https://example.com/guides/caching/">

절대 URL을 사용하고 마크업, 내부 링크, 리디렉션, 사이트맵의 선택을 일치시킵니다. 사이트맵은 한 주소를, 템플릿은 다른 주소를, 탐색 메뉴는 또 다른 주소를 가리킨다면 문제는 태그 부족이 아니라 모순된 구조입니다.

자기 참조 canonical은 선호 페이지의 정체성을 명확히 할 수 있습니다. 추적 매개변수만 다른 URL은 콘텐츠가 같다면 대표 페이지를 가리킬 수 있습니다. 상업적으로 더 중요하다는 이유로 별도 문서를 카테고리로 canonical 처리하지 않습니다. canonical은 다른 검색 의도를 합치거나 빈 콘텐츠를 해결하지 않습니다.

번역 페이지도 주의해야 합니다. 완전히 현지화된 페이지는 일반적으로 자체 표준 URL을 갖고 hreflang으로 언어 대안을 설명합니다. 모든 번역의 canonical을 영어로 향하게 하면 의도한 구분을 훼손합니다. 같은 언어의 지역별 중복은 더 세부적인 정책이 필요할 수 있지만 실제 콘텐츠와 대상에 따라 결정해야 합니다.

Search Console에서 사용자가 선언한 표준 URL과 Google이 선택한 URL을 비교합니다. 차이는 조사의 시작점입니다. 색인 요청을 반복하기 전에 리디렉션, 중복 내용, 일관되지 않은 링크, 오래된 크롤링 정보를 확인합니다.

실제로 색인하려는 URL로 사이트맵을 만듭니다

XML 사이트맵은 발견을 돕고 표준화 신호를 제공합니다. 색인을 명령하지는 않습니다. 검색에 포함할 선호 URL 중 접근 가능한 주소를 넣고 명백한 리디렉션, 오류 페이지, 의도적으로 noindex를 설정한 페이지는 제외합니다.

사이트를 게시하는 콘텐츠 목록과 동일한 자료에서 사이트맵을 생성합니다. 별도의 수동 목록은 쉽게 어긋납니다. 삭제한 페이지가 남고 새 영역이 빠질 수 있습니다. 배포 후 일부 URL을 확인해 호스트, HTTPS, 언어 접두사, 슬래시 규칙이 맞는지 검토합니다.

lastmod는 의미 있는 페이지 변경을 반영할 때만 사용합니다. 빌드마다 모든 날짜를 바꾸면 값의 신뢰성이 떨어집니다. 푸터 연도 변경은 모든 페이지의 핵심 정보를 수정한 것과 다릅니다. 게시일과 수정일 로직을 실제 콘텐츠 변경에 연결합니다.

Search Console에 사이트맵을 제출하고 처리 오류와 발견한 URL 수를 맥락에 맞게 검토합니다. 정상적으로 처리된 사이트맵이 모든 항목의 색인을 증명하지는 않습니다. 중요한 예외는 개별 URL로 조사하고 비슷한 템플릿을 비교한 뒤 제외가 문제인지 판단합니다.

유용한 내부 링크로 중요한 페이지를 연결합니다

크롤러와 독자 모두 유용한 페이지로 가는 경로가 필요합니다. 설명적인 문구와 실제 목적지를 가진 일반 링크를 사용합니다. JavaScript 이벤트만으로 작동하는 카드는 사람에게는 정상이어도 발견 경로로는 약할 수 있습니다. 실제 앵커 요소가 안정적인 출발점입니다.

독자가 수행할 일을 중심으로 카테고리를 구성합니다. 다른 페이지가 선행 지식이나 다음 단계를 설명한다면 문맥에 맞는 링크를 추가합니다. 기술 SEO 가이드 모음은 관련 문서를 주제별로 연결하는 예입니다. 탐색 메뉴는 모든 URL을 구분 없이 늘어놓는 대신 사이트 구조를 드러내야 합니다.

크롤링 깊이는 진단 지표이지 보편적인 숫자 규칙이 아닙니다. 가치 있는 페이지가 불필요한 여러 단계를 거쳐야 보인다면 개선해야 하지만 색인이나 순위를 보장하는 클릭 수는 없습니다. 고립 페이지, 깨진 페이지 나누기, 내부 검색으로만 도달하는 카테고리를 찾습니다.

대규모 카탈로그는 필터와 정렬을 검토합니다. 의도적으로 만든 일부 랜딩 페이지는 검색 수요에 답할 수 있지만 무제한 매개변수 조합은 비슷한 URL을 대량으로 만듭니다. 어떤 조합에 안정적이고 색인 가능한 페이지가 필요한지 정하고 링크, canonical, 크롤링 제어를 그 결정에 맞춥니다.

모든 URL을 사이트맵에 넣어 누락된 탐색 경로를 가리지 않습니다. 사이트맵은 주소를 알릴 수 있지만 사용자 여정이나 링크의 맥락을 고치지는 않습니다. 홈페이지와 방문자가 자연스럽게 찾을 카테고리에서 중요한 페이지까지 직접 확인합니다.

언어 대안을 설명하되 합치지 않습니다

hreflang은 Google이 동등한 언어 또는 지역 버전을 연결하도록 돕습니다. 번역 기능이 아니며 의미 있는 현지화 콘텐츠를 대체하지 않습니다. 각 대안은 고유하고 안정적인 URL에서 접근 가능해야 하며 같은 그룹의 다른 페이지를 다시 가리켜야 합니다.

다음 간단한 영어와 스페인어 예제는 기본 대안도 선언합니다.

html
<link rel="alternate" hreflang="en" href="https://example.com/guides/caching/">
<link rel="alternate" hreflang="es" href="https://example.com/es/guides/caching/">
<link rel="alternate" hreflang="x-default" href="https://example.com/guides/caching/">

두 대응 페이지에 자신을 포함한 동일한 전체 목록을 넣습니다. x-default는 지정된 언어나 지역에 해당하지 않는 사용자를 위한 선택적 대안입니다. 유효한 언어 코드와 필요한 경우 지역 코드를 사용합니다. 지역만으로는 언어를 나타낼 수 없습니다.

탐색 메뉴에서 같은 위치에 있다고 무관한 페이지를 연결하지 않습니다. 영어 카테고리와 스페인어 홈페이지는 동등한 번역이 아닙니다. 각 언어의 표준 URL을 해당 alternate 주소와 일치시키고 목적지가 예상하지 못한 곳으로 리디렉션되는지 확인합니다.

화면에 언어 선택 링크도 제공합니다. 추정한 위치나 언어만으로 강제 리디렉션하면 다른 버전에 접근하거나 시험하기 어려워질 수 있습니다. 방문자는 버전을 선택할 수 있어야 하고 크롤러는 직접 가져올 수 있어야 합니다.

표시된 콘텐츠와 일치하는 구조화된 데이터를 추가합니다

구조화된 데이터는 개체와 페이지 콘텐츠를 기계가 읽을 수 있게 설명합니다. 적절하고 지원되는 유형을 고르고 필수 속성에 실제 정보를 넣습니다. JSON이 유효하다는 것은 구문 검사를 통과했다는 뜻일 뿐입니다. 정확성과 표시 자격도 중요합니다.

예를 들어 문서 마크업은 실제 표시된 문서를 설명해야 합니다. 상품 마크업에 재고나 평가를 만들어 넣어서는 안 됩니다. 템플릿이 요구한다는 이유로 별점, 사람, 조직 정보를 추가하지 않습니다. 근거 없는 정보는 생략하고 템플릿을 수정합니다.

Google이 지원하는 검색 기능은 리치 결과 테스트로 확인하고 선택한 유형에 맞춰 오류를 해석합니다. 테스트 통과는 리치 결과 표시나 색인 생성을 보장하지 않습니다. 화면 내용이 바뀌면 마크업도 동기화합니다. 가격, 재고, 날짜가 따로 생성되는 경우 특히 중요합니다.

모바일 콘텐츠와 성능을 별도로 점검합니다

Google은 주로 모바일 버전의 콘텐츠를 색인에 사용합니다. 중요한 텍스트, 제목, 링크, 이미지, 구조화된 데이터가 모바일에서도 제공되어야 합니다. 작은 화면에 맞춰 배치를 바꿀 수는 있지만 핵심 설명을 없애거나 상호작용 후에만 가져오게 하면 검색 문서 자체가 달라집니다.

사용 경험도 확인합니다. 읽을 수 있는 글자, 조작 가능한 제어 요소, 안정적인 레이아웃, 빠른 반응이 필요합니다. 좋은 Core Web Vitals는 경험을 지원하지만 접근성, 관련성, 색인 가능성을 대신하지 않습니다. Core Web Vitals와 검색 순위 가이드는 성능 신호와 순위 약속을 구분합니다.

빠른 정적 응답과 느린 상호작용 페이지는 함께 존재할 수 있습니다. 성능 점수가 좋아도 Google의 렌더링 결과에서 핵심 내용이 빠질 수 있습니다. 중요한 콘텐츠를 JavaScript가 제공한다면 속도만으로 판단하지 말고 JavaScript SEO와 렌더링 점검 절차를 따릅니다.

감사를 반복 가능한 배포 점검으로 만듭니다

중요한 URL은 렌더링 결과를 보기 전에 응답 헤더와 본문을 저장합니다. 다음 명령은 예시 페이지를 일반 GET 요청으로 가져옵니다.

bash
curl -sS -D response-headers.txt -o response.html https://example.com/guides/caching/

파일에는 상태와 초기 HTML이 들어 있으며 최종 JavaScript DOM은 없습니다. 이를 브라우저 및 가능한 경우 Search Console URL 검사 결과와 비교합니다. Google에 저장된 정보를 보여 주는 색인 보고서와 현재 접근 및 렌더링을 확인하는 실시간 테스트를 구분합니다.

각 관련 단계에서 canonical, robots 지시문, 중요한 텍스트와 링크를 확인합니다. 이어서 같은 템플릿 그룹의 없는 URL, 리디렉션, 언어 대안을 시험합니다. 정상 페이지 하나만으로는 숨겨질 수 있는 규칙 수준의 오류를 찾을 수 있습니다.

접근과 응답 오류를 먼저 처리하고, 그다음 충돌하는 색인 신호, 누락 콘텐츠, 끊긴 발견 경로를 고칩니다. 이후 성능 작업에는 성능 점검표를 활용합니다. 수정마다 예상 동작, 담당자, 재시험 결과를 기록하고 라우팅, 렌더링, 메타데이터를 바꾼 배포 후에는 템플릿 검사를 반복합니다.

관련 가이드