sitemap.xml은 무엇을 하나
검색엔진에게 "우리 사이트에 이런 주소들이 있다"고 알려주는 목록입니다. 크롤러가 링크를 따라다니며 발견하는 것을 돕는 보조 수단이지, 색인을 보장하지는 않습니다.
파일은 멀쩡한데 효과가 없는 경우
가장 발견하기 어려운 문제입니다. 파일은 200으로 응답하고 형식도 맞는데, 안에 담긴 주소가 실제와 다른 경우입니다.
- 도메인을 옮겼는데 sitemap만 옛 주소를 담고 있음
- 개발용 주소가 그대로 남아 있음
- 프로토콜이 http인데 실제 사이트는 https
이러면 제출해도 아무 일도 일어나지 않습니다. 검색엔진 입장에서는 존재하지 않는 주소 목록을 받은 셈입니다.
확인 방법은 단순합니다. sitemap을 열어서 주소 하나를 복사해 브라우저에 붙여 봅니다. 그 주소가 그대로 열리지 않으면 문제입니다.
무엇을 넣나
세 조건을 모두 만족하는 공개 URL만 넣습니다.
- 200으로 응답한다 — 리디렉션되거나 404인 주소는 뺍니다
- 색인 가능하다 — noindex가 걸린 페이지는 뺍니다
- 자기 자신을 대표주소로 가리킨다 — canonical이 다른 곳을 가리키면 뺍니다
무엇을 빼나
| 대상 | 이유 |
|---|---|
| 관리자·로그인 페이지 | 검색 대상이 아님 |
| API 경로 | 사람이 읽는 페이지가 아님 |
| 검색 결과 페이지 | 무한히 생성되는 조합 |
| 파라미터가 붙은 중복 주소 | 대표주소 하나만 넣음 |
| noindex 페이지 | 색인하지 말라면서 목록에 넣는 모순 |
| 미리보기·초안 | 공개 대상이 아님 |
마지막 두 개가 특히 흔합니다. "색인하지 마라"와 "이 주소를 색인해 달라"를 동시에 보내면 신호가 어긋납니다.
lastmod를 어떻게 쓰나
lastmod는 실제 내용이 바뀐 시점을 적습니다. 배포할 때마다 전체를 오늘 날짜로 갱신하면 신호로서의 값을 잃습니다.
바뀌지 않은 페이지가 매일 "방금 수정됨"이라고 말하면, 검색엔진은 이 값을 무시하게 됩니다.
형식 오류
파싱 자체가 실패하는 경우도 있습니다.
- XML 선언이 없거나 인코딩이 어긋남
- 이스케이프하지 않은
&같은 문자가 URL에 들어감 - 파일이 너무 큼 (한 파일에 URL 5만 개 또는 압축 전 50MB를 넘기지 않습니다)
큰 사이트는 sitemap을 나누고 색인 sitemap으로 묶습니다.
제출과 확인
robots.txt에 Sitemap: 줄로 위치를 알리고, 서치 콘솔과 네이버 서치어드바이저에 각각 제출합니다.
제출 후에는 읽힌 URL 수를 확인합니다. 제출한 수와 크게 차이 나면 위의 조건 중 하나에 걸린 것입니다.