네이버 서치어드바이저 서브도메인 등록: 사이트맵·RSS·수집 요청이 하는 일
서브도메인 사이트맵을 본진 사이트에 넣었더니 네이버가 받지 않았습니다. https://duolabs.co.kr 로 등록해 둔 사이트의 사이트맵 제출 칸에 https://cdn.duolabs.co.kr/sitemap.xml 을 넣고 확인을 누르자, 화면 아래에 빨간 띠가 떴습니다.
해당 도메인의 URL을 입력해주세요.
같은 날 Google Search Console 에서는 서브도메인 사이트맵 열아홉 개가 한 목록에 나란히 있었습니다. 도메인 속성으로 등록해 두면 서브도메인이 전부 한 속성에 들어오기 때문입니다. 저는 네이버도 비슷하게 받아 줄 거라고 생각하고 있었습니다.
서브도메인을 각각 다른 사이트로 보는 네이버
도움말 칸에 이유가 적혀 있었습니다. 「사이트맵 피드 내의 모든 URL은 소유확인 된 사이트와 동일한 도메인이어야 합니다.」 네이버 서치어드바이저의 사이트는 호스트 단위입니다. duolabs.co.kr 과 cdn.duolabs.co.kr 은 서로 다른 사이트이고, 한쪽 사이트에 다른 쪽 URL 을 제출할 수 없습니다.
RSS 및 사이트맵 제출 가이드에도 같은 조건이 RSS 와 사이트맵 양쪽에 똑같이 적혀 있습니다. 구글의 도메인 속성에 해당하는 것은 찾지 못했습니다. 사이트 목록 화면에는 「최대 100개 사이트를 등록할 수 있습니다」라고만 나옵니다.
결국 서브도메인 열세 개를 하나씩 등록했습니다. 순서는 이렇습니다.
- 웹마스터 도구 첫 화면에서
https://<서브도메인>을 사이트로 추가합니다 - 소유 확인에서 HTML 태그 방식을 고르고
<meta name="naver-site-verification" content="…">값을 받습니다 - 그 태그를 해당 앱의
<head>에 넣어 배포합니다 - 소유 확인을 누르고, 확인되면 그 사이트 안에서 사이트맵을 제출합니다
열세 번 받은 서로 다른 확인 값
먼저 알아야 했던 것은 확인 값이 계정마다 하나인지, 사이트마다 다른지였습니다. 하나라면 모든 앱에 미리 넣어 두고 등록만 하면 됩니다. 두 사이트의 값을 받아 보니 달랐습니다. 사이트마다 40자리 16진수 값이 따로 나옵니다.
값을 어디에 둘지도 한 번 고민했습니다. 이 태그는 누구나 페이지 소스에서 볼 수 있는 공개 값이라 환경변수로 숨길 이유가 없습니다. 그래서 각 앱 루트 레이아웃의 메타데이터에 코드로 넣었습니다. Next.js 에서는 한 줄입니다.
export const metadata: Metadata = {
metadataBase: new URL(SITE_URL),
verification: { other: { "naver-site-verification": "<사이트마다 받은 값>" } },
// ...
};열 곳은 값을 한꺼번에 받아 한 번에 넣고 배포했습니다. 배포가 끝난 뒤 사이트마다 첫 화면을 한 번씩 받아 태그가 실제로 나오는지 확인하고 나서 소유 확인을 눌렀습니다. 네이버가 확인하는 것은 코드가 아니라 공개된 페이지라, 배포보다 먼저 누르면 확인할 태그가 아직 없습니다.
등록보다 먼저 고친 사이트맵
사이트를 등록하기 전에 각 서브도메인의 robots.txt 와 sitemap.xml 을 한 번씩 받아 봤습니다. 제출하고 나서 콘솔의 오류로 알게 되는 것보다 빠르기 때문입니다. 열세 곳 중 네 곳은 사이트맵이 없거나 첫 화면 한 줄뿐이었습니다. 구글 콘솔에 먼저 제출해 둔 것들은 「가져올 수 없음」이나 「오류 1개」로 남아 있었습니다.
사이트맵이 있는 곳에서도 하나가 걸렸습니다. 한 사이트맵에 noindex 를 건 페이지 세 개가 같이 들어 있었습니다. 사이트맵은 「이 주소를 수집해 달라」는 목록인데 페이지는 「색인하지 말라」고 하니 서로 엇갈린 말을 하는 셈입니다. 목록은 페이지 설정에서 뽑도록 바꿔서, noindex 페이지는 사이트맵에 안 들어가게 했습니다.
사이트맵과 RSS, 가이드가 권하는 쪽
RSS 도 제출할 수 있어서 처음에는 RSS 가 새 글을 더 빨리 알린다고 생각했습니다. 블로그처럼 글이 계속 느는 곳이면 RSS 쪽이 유리할 거라고요. 가이드를 읽어 보니 그렇게 적혀 있지 않았습니다.
네이버 검색로봇은 웹마스터도구에 제출된 RSS 및 사이트맵을 "콘텐츠 피드"로 간주하여 주기적으로 재 방문 합니다.
둘 다 같은 「콘텐츠 피드」이고, 차이는 담는 내용입니다. RSS 는 본문까지 담는 최신 글 피드라 URL 을 많이 담기 어렵고, 가이드는 「되도록 RSS 보다는 사이트맵을 적극적으로 활용하는 것을 권장」한다고 적었습니다. RSS 에는 발행된 글이 1개 이상 있어야 하고, 본문 전체를 넣어 달라는 요청도 있습니다.
| 사이트맵 | RSS | |
|---|---|---|
| 담는 것 | URL 과 수정일 등 | 최신 글의 본문까지 |
| 한도 | 10MB · URL 50,000개 | 10MB · 글 1개 이상 |
| 가이드의 권고 | 사이트의 모든 URL 을 담기를 권장 | 본문 전체 공개 권장, 되도록 사이트맵 우선 |
그래서 RSS 는 블로그와 공개 문서처럼 이미 피드가 있는 곳에만 내기로 하고, 나머지 서브도메인은 사이트맵만 냈습니다. RSS 를 내려고 피드를 새로 만들지는 않았습니다.
수집 요청에 기대하면 안 되는 것
「웹 페이지 수집」 요청은 버튼을 누르면 로봇이 바로 올 것처럼 보입니다. 수집요청 가이드는 그렇지 않다고 분명히 적습니다.
사용자가 직접 웹페이지를 수집 요청하더라도 검색로봇이 실시간으로 요청된 URL을 방문하지 않습니다. (…) 우선순위에 따라 최소 1일에서 몇 주간의 시간이 소요될 수 있습니다.
같은 URL 을 매일 다시 요청할 필요가 없고, 수집에 성공해도 검색 노출은 보장되지 않는다고 합니다. 사이트별로 요청할 수 있는 범위도 제한돼 있습니다. 그래서 수집 요청은 이번에 첫 화면이 바뀐 서브도메인 몇 곳의 대표 페이지에만 쓰기로 했습니다. 나머지는 사이트맵에 맡깁니다.
서브도메인마다 따로 읽는 robots.txt
사이트를 호스트 단위로 보는 것은 robots.txt 도 마찬가지입니다. robots.txt 가이드에 따르면 규칙은 같은 호스트·프로토콜·포트 아래 페이지에만 유효합니다. 본진의 robots.txt 는 서브도메인에 아무 영향이 없습니다.
응답 코드에 따른 해석도 적혀 있습니다. 4xx 면 「모두 허용」, 5xx 면 「모두 허용하지 않음」입니다. robots.txt 가 404 인 서브도메인은 막아 둔 경로가 있어도 네이버에게는 전부 열린 사이트입니다. 이번에 robots.txt 가 404 이던 서브도메인 한 곳에 파일을 새로 만들었습니다.
가이드는 한 가지를 더 강조합니다. robots.txt 는 수집 규칙일 뿐 보호 수단이 아니라서, 노출되면 안 되는 콘텐츠는 로그인 같은 다른 방법으로 막으라고 합니다. 검색에 내지 않을 화면은 robots.txt 에만 맡기지 않고 페이지 쪽에서도 noindex 를 걸었습니다. 그것도 검색 결과에서 빼 줄 뿐 여는 것 자체를 막지는 않습니다. 정말 지켜야 하는 화면은 로그인 뒤에 있어야 합니다.
아직 모르는 반영 속도
등록과 제출은 오늘 끝났지만, 네이버 검색에 실제로 얼마나 반영될지는 아직 모릅니다. 가이드가 「최소 1일에서 몇 주」라고 적은 것이 수집 요청 기준이니, 사이트맵으로 들어온 주소도 비슷하게 걸릴 거라고 짐작만 하고 있습니다. 몇 주 뒤 서치어드바이저 리포트에서 서브도메인별 수집 현황을 다시 보려고 합니다.
참고: 네이버 서치어드바이저 RSS 및 사이트맵 제출 · 수집요청 및 검색제외 · robots.txt 설정하기
함께 읽기
- 구글·네이버·Bing·다음 웹마스터 도구 비교: 서브도메인이 많을 때 갈리는 것서브도메인 열세 개를 검색엔진에 등록하는 데 구글은 DNS 레코드 한 줄이었고, 네이버는 같은 일을 열세 번 반복해야 했습니다. 두 도구의 기능 목록은 비슷합니다. 사이트맵을 받고, 소유를 확인하고, 수집 현황을 보여 줍니다. 갈리는 것은 무엇을 사이트 하나로 세는가였습니다.
- 사이트맵 제출 다음에 할 일: 크롤링·색인·순위를 가르는 단계별 점검구글과 네이버에 서브도메인 열세 개를 등록하고 사이트맵까지 낸 뒤 Bing 등록을 시작하고 나니, 할 일이 끝났다는 기분이 들었습니다. 콘솔마다 「성공」이 떴고 발견된 페이지 수도 나왔습니다. 그런데 네이버 수집요청 가이드에 이런 문장이 있었습니다.
- JSON-LD @id 하나로 회사가 둘이 되는 문제: #org와 #organization형제 앱 스무 개의 구조화 데이터(JSON-LD)를 모아 보다가 회사가 두 개인 것을 발견했습니다. 여섯 곳은 발행자를 이렇게 가리켰습니다.
- robots.txt의 AI 봇 구분: 학습을 막으려다 ChatGPT 검색에서 빠진 두 앱듀오랩스 이름으로 운영하는 형제 앱 스무 개의 robots.txt를 하나씩 열어 본 적이 있습니다. 그중 두 곳에 이런 줄이 있었습니다.
- 네이버 서치어드바이저 등록부터 사이트맵 제출까지웹사이트를 만들었다고 네이버 검색 결과에 바로 나타나는 것은 아닙니다. 검색로봇이 사이트를 발견하고, 문서를 수집하고, 색인할 수 있어야 합니다. 네이버 서치어드바이저는 이 과정을 직접 보장하는 등록 창구라기보다 사이트 소유권을 확인하고 수집·색인 상태를 점검하는 운영 도구에 가깝습니다.