Skip to Content
Frontend사이트맵 제출과 검색 색인의 차이
🎨 Frontend2026년 10월 16일

사이트맵 제출과 검색 색인의 차이

#seo#sitemap#robots#company-lens#pokemon-go

Company Lens와 PogoAtlas를 공개한 뒤 검색엔진에 등록했습니다. 외부에서 사이트맵은 정상으로 열렸지만 Search Console에는 가져올 수 없다는 상태가 표시됐습니다.

사이트맵의 HTTP 200 응답은 파일을 제공하고 있다는 확인입니다. 검색엔진이 실제로 읽었는지, 페이지를 렌더링했는지, 검색 결과에 넣었는지까지 알려주지는 않습니다. 두 서비스를 등록하면서 이 단계를 나눠 확인했습니다.

사이트맵 응답과 색인의 차이

먼저 robots와 사이트맵 주소를 확인했습니다. 사이트맵이 막힌다는 근거 없이 DNS나 Tunnel부터 변경하지는 않았습니다. 외부 요청 결과와 Search Console 상태를 비교하며 확인 범위를 좁혔습니다.

확인한 결과별도로 확인할 항목
외부 HTTP 200검색엔진 크롤러가 받은 응답
사이트맵 제출 접수실제 파일 수집 여부
특정 URL의 렌더링다른 URL의 수집·색인 여부
서비스 배포 완료검색 결과 노출 여부

Google 공식 문서도 사이트맵이 URL 발견을 돕지만 모든 항목의 크롤링과 색인을 보장하지는 않는다고 설명합니다. 제출 완료만으로 등록 작업을 끝냈다고 보기 어려웠습니다.

Company Lens의 색인 대상

검색 조건마다 생기는 결과 주소는 색인 대상에서 제외하도록 하고, 서비스 안의 링크 탐색은 유지했습니다. 회사 상세는 최신월 가입자 50명 이상인 대상을 분할 사이트맵에 넣었습니다. 당시 약 2만 7천 곳이었습니다.

이는 사이트맵에 넣을 대상을 정한 기준입니다. 작은 사업장의 검색과 상세 접근을 막은 것은 아닙니다. 통계와 대표 주소, API 문서의 메타정보도 함께 맞췄습니다.

PogoAtlas의 화면 리소스 접근

PogoAtlas는 이후 실제 URL 테스트에서 화면이 사용하는 API가 robots 규칙에 막히는 문제를 확인했습니다. 페이지 주소를 열어 두어도 렌더링에 필요한 리소스가 차단되면 화면 내용을 확인하는 과정에 문제가 생길 수 있었습니다.

공개 화면의 API 차단을 풀고 직접 접속할 때의 서버 HTML도 보완했습니다. 이후 특정 도감 URL에서 내용이 표시되는 것을 확인했습니다. 이 변경은 React 전환과 서버 렌더링 글에도 정리했습니다.

확인한 것은 해당 URL의 렌더링입니다. 이전의 모든 색인 제외가 같은 원인이었다거나 모든 페이지가 검색 결과에 나오는 것까지 확인한 것은 아닙니다. Company Lens의 색인 상태도 별도로 남겼습니다.

배포 결과에서 확인할 항목

검색엔진의 처리 상태를 보기 전에 서비스가 어떤 문서를 제공하는지 확인합니다. 아래는 공개 주소의 robots와 사이트맵을 읽는 예시입니다.

bash
example/check-crawl-resources.sh
curl --fail-with-body -i 'https://companylens.ersione.com/robots.txt' curl --fail-with-body -i 'https://companylens.ersione.com/sitemap.xml' curl --fail-with-body -i 'https://pogo.ersione.com/robots.txt' curl --fail-with-body -i 'https://pogo.ersione.com/sitemap.xml'

HTTP 200뿐 아니라 본문이 XML인지, 오류 안내 HTML을 200으로 돌려준 것은 아닌지 봅니다. 분할 사이트맵이면 인덱스에 있는 개별 파일도 열려야 합니다. 이 방법으로 현재 주소의 응답은 확인할 수 있지만, Googlebot도 같은 응답을 받았는지는 따로 확인해야 합니다.

개별 문서에서는 canonical, robots 메타정보, 서버가 내려준 본문을 함께 봅니다. 브라우저에서 JavaScript 실행 후 제목이 보이는 것과 최초 HTML에 내용이 들어 있는 것은 다릅니다. HTML 전체에서 단어 하나를 검색하면 스크립트의 JSON에만 들어 있는 값까지 찾을 수 있으므로, 실제 본문 요소에 표시됐는지 구분해야 합니다.

text
example/seo-check-order.txt
1. 외부 HTTP 상태와 응답 본문 2. robots·사이트맵·canonical·noindex 3. 서버 HTML의 실제 제목과 본문 4. 검색엔진 URL 테스트의 렌더링·리소스 오류 5. 개별 URL의 색인 상태와 실제 검색 결과

앞단을 고쳐도 검색엔진의 다음 수집까지 시간이 걸릴 수 있습니다. 그래서 수정 직후의 로컬 결과, 공개 배포 응답, URL 테스트 결과를 날짜와 대상 주소로 구분해 남깁니다. 한 URL의 색인이 확인됐다고 다른 페이지까지 색인됐다고 판단하지는 않습니다.

검색 조건 URL과 상세 URL

회사명 검색은 입력과 필터 조합에 따라 주소가 계속 늘어납니다. 이들을 모두 사이트맵에 넣기보다 공개할 상세 문서와 탐색용 검색 화면의 역할을 정했습니다. 반대로 색인 대상에서 뺐다는 이유로 사용자가 상세 이력을 볼 수 없게 만들지는 않았습니다.

PogoAtlas에서도 도감 URL의 직접 접속과 앱 안의 이동을 따로 확인했습니다. 클라이언트 이동에서는 이미 자료를 갖고 있어 내용이 보일 수 있지만, 검색엔진은 해당 URL부터 시작할 수 있습니다. 서버 렌더링과 API 접근을 같이 살펴본 이유입니다.

Company Lens는 색인할 회사 상세를 골라 분할 사이트맵으로 제공했고, PogoAtlas는 API 차단을 풀고 서버 HTML을 보완한 뒤 특정 도감 URL의 렌더링을 확인했습니다. 여기까지가 당시 확인한 결과이며, 두 서비스의 모든 URL이 검색 결과에 나오는 것까지 확인한 것은 아닙니다. 사이트맵을 제출한 상태를 검색 등록 완료로 보지는 않았습니다.

참고 자료

Last updated on