검색엔진에 제출한 사이트가 한 달이 지났는데도 검색 결과에 나타나지 않는 경험을 해봤을까. 웹사이트를 만들고 구글에 등록했으면 당연히 검색되어야 한다고 생각하지만, 실제로는 크롤링, 색인, 순위결정이라는 여러 단계를 거쳐야 한다. 다만 대부분의 개발자들은 이 과정 중 어느 단계에서 문제가 생겼는지 정확히 파악하지 못한 채 답답해한다. 이번에는 Google Search Console이라는 공식 진단 도구가 어떻게 작동하는지, 각 상태 코드가 무엇을 의미하는지, 그리고 실제로 어떤 조치를 취해야 하는지 완벽하게 정리해서 소개하겠다.

 

1단계: Google Search Console 등록 및 소유권 확인

먼저 Google Search Console(구글 서치 콘솔)에 접속하려면 구글 계정이 필요하다. https://search.google.com/search-console로 들어가면 기존 속성을 관리하거나 새 속성을 추가할 수 있다. 속성(Property)은 도메인 또는 URL 접두사 형식 두 가지로 등록할 수 있는데, 도메인 형식이 모든 하위도메인과 프로토콜(http/https)을 포함하므로 보통 도메인 형식을 추천한다.

속성 추가 후 가장 중요한 것은 소유권 확인(Verification)이다. Google Search Console이 실제 사이트 소유자인지 검증하는 단계인데, 다음 네 가지 방법 중 하나를 선택할 수 있다.

✓ HTML 파일 업로드: 구글이 제공하는 HTML 파일을 서버의 루트 디렉토리에 업로드하고, 구글이 해당 파일 접근을 확인하면 소유권이 인증된다. FTP/SFTP 접근이 가능한 경우 가장 확실한 방법이다.

✓ HTML 메타 태그: 구글이 제공하는 메타 태그(meta name="google-site-verification")를 사이트의 <head> 섹션에 추가한다. PHP나 정적 HTML 모두 가능하며, 태그가 있는 페이지가 공개 상태여야 한다.

✓ Google Analytics 계정 연동: 해당 사이트에 이미 Google Analytics가 설치되어 있다면, GA 계정으로 직접 인증할 수 있다.

✓ Google Tag Manager 계정 연동: GTM을 사용 중이라면 GTM 계정으로도 인증 가능하다.

메타 태그 방식이 가장 일반적이므로 이 방법을 보여주자. PHP 기반 사이트라면 head 섹션에 다음처럼 추가한다.

<head>
  <meta charset="UTF-8">
  <meta name="google-site-verification" content="abcdef1234567890ghi_jkl_mnopqrst">
  <title>내 사이트</title>
</head>

content 속성의 값은 Google Search Console에서 제공하는 문자열로 각 사이트마다 고유하다. 저장 후 구글 콘솔에서 "확인" 버튼을 누르면 메타 태그를 자동으로 찾아서 인증한다.

 

2단계: 색인 상태 확인 (URL 검사 도구)

소유권 인증 후 Google Search Console 대시보드에 들어가면 "색인 생성" 섹션에서 전체 색인된 페이지 수를 볼 수 있다. 다만 개별 페이지의 색인 상태를 확인하려면 "URL 검사" 도구를 사용해야 한다. 이 도구가 바로 검색 결과 미노출 문제를 진단하는 핵심 기능이다.

콘솔 상단 검색창에 조사할 URL을 입력하면, 구글이 해당 페이지를 마지막으로 크롤링했을 때의 상태를 보여준다. 화면에 표시되는 상태 메시지는 다음과 같이 분류된다.

상태 의미 원인 조치
URL이 Google에 등록되었습니다 정상 색인됨 페이지가 구글 색인에 포함됨 모니터링만 진행
크롤링됨 - 현재 색인 생성되지 않음 크롤링은 했지만 색인 제외 robots.txt 차단, noindex 메타 태그, 저품질 콘텐츠 noindex 제거, robots.txt 확인
발견됨 - 현재 색인 생성되지 않음 링크는 발견했으나 아직 크롤링 안 함 크롤 예산 부족, 내부 링크 부족 사이트맵 제출, 내부 링크 추가
제외됨 명시적으로 색인 제외 robots.txt, 리다이렉트, 페이지 삭제 제외 사유 확인 후 제거
오류 발생 크롤링 불가 404, 500 서버 오류, 연결 실패 HTTP 상태 코드 수정

예를 들어 "크롤링됨 - 현재 색인 생성되지 않음" 상태라면, 페이지 HTML 소스 코드에 noindex 메타 태그가 있거나 robots.txt에서 해당 URL을 차단했을 가능성이 크다. 이 경우 개발자 도구나 소스 보기로 다음을 확인해야 한다.

<!-- ✗ 잘못된 예: noindex 메타 태그로 색인 차단 -->
<meta name="robots" content="noindex">

<!-- ✓ 올바른 예: index 허용 (또는 태그 제거) -->
<meta name="robots" content="index, follow">

robots.txt 파일도 마찬가지로 확인해야 한다. robots.txt는 사이트 루트에 위치하며, 다음과 같은 규칙으로 크롤러의 접근을 제어한다.

# ✗ 잘못된 예: 모든 크롤러 차단
User-agent: *
Disallow: /

# ✓ 올바른 예: 특정 디렉토리만 차단
User-agent: *
Disallow: /admin/
Disallow: /private/
Allow: /
Sitemap: https://example.com/sitemap.xml

특히 테스트 단계에서 실수로 전체 크롤링을 차단했다가 프로덕션 배포 시 robots.txt를 수정하지 않는 경우가 많다. URL 검사 도구에서 제외 상태가 나타나면 이 부분부터 확인하자.

 

3단계: 사이트맵 제출 및 크롤 예산 최적화

"발견됨 - 현재 색인 생성되지 않음" 상태는 구글이 페이지 링크를 찾았지만 아직 크롤링할 여유가 없다는 의미다. 이를 해결하려면 사이트맵(Sitemap)을 제출해서 구글에 페이지 목록을 명시적으로 알려야 한다.

사이트맵은 XML 형식 파일로, 사이트의 모든 페이지 URL과 메타데이터(마지막 수정일, 업데이트 빈도, 우선순위 등)를 담고 있다. PHP로 동적 사이트맵을 생성하는 간단한 예제를 보자.

<?php
header('Content-Type: application/xml; charset=UTF-8');
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

// 정적 페이지
$pages = ['/', '/about', '/contact', '/blog'];
foreach ($pages as $page) {
    echo '<url>';
    echo '<loc>https://example.com' . htmlspecialchars($page) . '</loc>';
    echo '<lastmod>' . date('Y-m-d') . '</lastmod>';
    echo '<changefreq>weekly</changefreq>';
    echo '<priority>1.0</priority>';
    echo '</url>';
}

// 블로그 게시물 (DB 쿼리)
$posts = query("SELECT id, updated_at FROM posts WHERE status='published' ORDER BY updated_at DESC");
foreach ($posts as $post) {
    echo '<url>';
    echo '<loc>https://example.com/blog/' . urlencode($post['id']) . '</loc>';
    echo '<lastmod>' . date('Y-m-d', strtotime($post['updated_at'])) . '</lastmod>';
    echo '<changefreq>monthly</changefreq>';
    echo '<priority>0.8</priority>';
    echo '</url>';
}

echo '</urlset>';
?>

이 파일을 routes에 등록해서 /sitemap.xml로 접근 가능하게 한 후, Google Search Console의 "사이트맵" 섹션에서 URL을 제출한다. 일주일 이내에 구글이 사이트맵을 처리하고 포함된 URL들을 크롤링 대기열에 추가한다.

사이트맵 제출 외에도 크롤 예산(Crawl Budget)을 최적화해야 한다. 크롤 예산이란 구글이 사이트를 크롤링하는 데 할당하는 리소스의 양을 의미한다. 다음과 같은 방법으로 크롤 예산을 절약할 수 있다.

1) 불필요한 페이지 차단: 파라미터 페이지(정렬, 필터링으로 인한 중복 URL), 인쇄 버전, 미리보기 페이지 등을 robots.txt에서 차단하거나 noindex 처리한다.

2) 내부 링크 최적화: 중요한 페이지는 홈페이지나 네비게이션에서 직접 링크하고, 불필요한 깊이 있는 페이지는 링크를 줄인다.

3) 리다이렉트 체인 제거: A → B → C 같은 연쇄 리다이렉트는 크롤링 낭비를 초래한다. 직접 A → C로 리다이렉트하자.

 

4단계: 주요 오류 진단 및 해결

Google Search Console의 "색인 생성" 섹션에는 "오류" 탭이 있는데, 여기서 크롤링 중 발생한 HTTP 오류들을 확인할 수 있다. 가장 흔한 오류들을 살펴보자.

✗ 404 Not Found: 페이지가 존재하지 않는다는 뜻이다. 보통 페이지 삭제 후 이전 링크가 남아 있을 때 발생한다. 정말로 필요 없는 페이지라면 그대로 둬도 되지만, 옮겨진 페이지라면 301 리다이렉트로 새 URL로 보내야 한다.

// ✓ 올바른 예: 301 리다이렉트
header('HTTP/1.1 301 Moved Permanently');
header('Location: https://example.com/new-page-url');
exit;

✗ 503 Service Unavailable: 서버가 일시적으로 응답하지 않았다는 뜻이다. 유지보수 중이거나 서버 과부하 상태에서 크롤러가 접근했을 가능성이 크다. 이 경우 Retry-After 헤더를 명시하면 구글이 나중에 다시 방문한다.

// ✓ 유지보수 중 일시적 응답 불가
header('HTTP/1.1 503 Service Unavailable');
header('Retry-After: 86400'); // 24시간 후 다시 크롤링
echo 'Site under maintenance';
exit;

✗ 500 Internal Server Error: 서버 내부 오류다. 보통 PHP 문법 오류, DB 연결 실패, 메모리 부족 등이 원인이다. 서버 로그를 확인해서 원인을 파악하고 즉시 수정해야 한다.

✓ 200 OK 정상: 크롤링은 성공했지만 색인 생성되지 않은 상태라면, robots.txt나 noindex 메타 태그를 확인하자.

 

5단계: 색인 요청 및 재검사

페이지 상태를 수정한 후에는 Google Search Console의 "색인 생성 요청" 기능으로 구글에 재검사를 요청할 수 있다. URL 검사 도구에서 "Google에 색인 생성 요청" 버튼을 누르면 된다. 다만 요청 후 색인까지는 며칠에서 몇 주까지 걸릴 수 있다.

색인 상태는 실시간으로 갱신되지 않으므로, 수정 후 하루 정도 기다렸다가 다시 URL 검사를 해서 상태 변화를 확인하는 것이 좋다. 대량의 페이지를 수정했다면 사이트맵을 업데이트해서 다시 제출하자. 구글이 사이트맵 업데이트를 감지하면 자동으로 재크롤링을 스케줄한다.

 

6단계: 흔한 실수와 해결책

✗ noindex를 무심코 배포: 개발 환경에서 테스트할 때 robots.txt 또는 noindex 메타 태그를 추가했는데, 프로덕션 배포 시 제거하지 않는 경우가 많다. 배포 직후 Google Search Console에서 색인 생성되지 않는 페이지를 확인해서 이를 감지할 수 있다.

✗ robots.txt 파일을 빠뜨림: robots.txt가 없으면 구글이 기본적으로 모든 페이지를 크롤링하려고 시도한다. 다만 /admin, /api, /temp 같은 불필요한 경로는 명시적으로 차단해야 리소스를 절약할 수 있다.

✗ 사이트맵을 한 번 제출하고 방치: 페이지가 추가되거나 삭제되면 사이트맵도 자동으로 갱신되어야 한다. 동적 사이트라면 매일 밤 정기적으로 사이트맵을 재생성하는 자동화 스크립트를 만들어 두는 것이 좋다.

✓ 올바른 방법: 개발/테스트 환경에서는 robots.txt에 Disallow: / 설정을 하고, 프로덕션 배포 시 정확히 제거한 후 배포한다. 또한 정기적으로 Google Search Console의 색인 상태 대시보드를 확인해서 색인되지 않는 페이지가 있으면 즉시 조치한다.

 

마무리: 색인은 지속적인 모니터링의 영역

웹사이트의 검색 노출은 한 번의 설정으로 끝나지 않는다. Google Search Console은 사이트 상태를 실시간으로 감시하고, 문제가 발생하면 즉시 알려주는 강력한 도구다. 페이지 추가/수정/삭제 시마다 Google Search Console에서 상태를 확인하고, 오류가 나타나면 빠르게 대응하는 습관이 SEO 성과를 좌우한다. 처음엔 번거로워 보이지만, 한 번 자동화 체계를 잡으면 관리는 훨씬 수월해진다. 이 글의 URL 검사 도구와 사이트맵 제출 부분을 참고해서 지금 당신의 사이트가 제대로 색인되고 있는지 진단해보자. 문제가 있다면 원인을 파악해서 조치하면, 몇 주 내에 검색 결과에서 사이트를 볼 수 있을 것이다.