Ghost 블로그를 Google Search Console에 등록하면서 겪은 사이트맵 시행착오
Goodtek 블로그 운영을 시작했으니 이제 블로그가 잘 검색되도록 해야하는 작업 중 하나가 Google Search Console 등록이었습니다.
블로그 글을 아무리 열심히 써도 Google이 내 글을 제대로 발견하지 못하면 검색 유입은 시작되지 않습니다. 특히 새로 만든 도메인과 새 블로그는 Google 입장에서 아직 신뢰도도 낮고, 어디에 어떤 글이 있는지도 모릅니다.
그래서 블로그를 만들었다면 초기에 꼭 해야 하는 일이 있습니다.
Search Console 등록, 사이트맵 제출, URL 색인 요청.
말로만 보면 간단합니다.
“사이트맵 주소 넣으면 끝 아닌가?”
저도 처음에는 그렇게 생각했습니다. 그런데 실제로 해보니 생각보다 헷갈리는 부분이 있었습니다. 특히 Ghost 블로그의 사이트맵 구조와 Search Console의 처리 방식 때문에 잠깐 헤맸습니다.
이번 글은 Goodtek 블로그를 Google Search Console에 등록하면서 실제로 겪은 사이트맵 시행착오를 정리한 기록입니다.
Goodtek의 현재 구조
Goodtek은 루트 도메인 아래에 여러 서비스를 서브도메인으로 나누는 구조로 운영하려고 합니다.
예를 들면 이런 식입니다.
goodtek.xyz
blog.goodtek.xyz
community.goodtek.xyz
notes.goodtek.xyz아직 메인 웹사이트는 완성되지 않았지만, 블로그와 커뮤니티, 노트는 먼저 운영하기 시작했습니다.
여기서 고민이 생겼습니다.
Search Console에는 무엇을 등록해야 할까?
처음에는 https://blog.goodtek.xyz/만 등록하면 되는 줄 알았습니다. 하지만 전체 도메인 관점에서는 goodtek.xyz 자체도 함께 관리하는 것이 좋겠다고 판단했습니다.
그래서 최종적으로는 이렇게 등록했습니다.
|
속성 유형 |
등록 대상 |
목적 |
|---|---|---|
|
Domain 속성 |
goodtek.xyz |
루트 도메인과 전체 서브도메인 관리 |
|
URL-prefix 속성 |
https://blog.goodtek.xyz/ |
블로그 검색 상태 세부 확인 |
|
URL-prefix 속성 |
https://community.goodtek.xyz/ |
커뮤니티 검색 상태 확인 |
|
URL-prefix 속성 |
https://notes.goodtek.xyz/ |
Notes 검색 상태 확인 |
Domain 속성은 루트 도메인과 서브도메인을 전체적으로 보기 위한 용도이고, URL-prefix 속성은 각 서비스별 검색 상태를 따로 보기 위한 용도입니다.
특히 블로그 SEO를 세부적으로 보려면 https://blog.goodtek.xyz/ URL-prefix 속성을 따로 등록하는 것이 편했습니다.
Search Console 등록은 사이트가 완성된 뒤 해야 할까?
처음에는 메인 웹사이트가 아직 없어서 Search Console 등록을 미뤄야 하나 고민했습니다.
결론부터 말하면, 미룰 필요는 없었습니다.
도메인을 이미 구매했고 DNS를 관리할 수 있다면, 메인 웹사이트가 완성되지 않았어도 Search Console의 Domain 속성은 등록할 수 있습니다.
Goodtek 도메인은 가비아에서 구매했고, DNS도 가비아에서 관리 중입니다. Search Console에서 Domain 속성으로 goodtek.xyz를 등록한 뒤, Google이 제공하는 TXT 레코드를 가비아 DNS에 추가하면 소유권 확인이 가능합니다.
제가 진행한 순서는 이랬습니다.
goodtek.xyz도메인 구매- 가비아 DNS에서 TXT 레코드 등록
- Search Console에서
goodtek.xyzDomain 속성 인증 https://blog.goodtek.xyz/URL-prefix 속성 추가- 블로그 사이트맵 제출
여기서 중요한 점은 이겁니다.
Search Console 등록 자체는 도메인 소유권 확인이 핵심입니다.
사이트맵 제출과 색인 요청은 실제 콘텐츠가 공개된 뒤에 진행하면 됩니다.
Ghost 블로그의 사이트맵 구조
Goodtek 블로그는 Ghost로 운영하고 있습니다.
Ghost는 기본적으로 사이트맵을 자동 생성합니다. 그래서 제가 직접 사이트맵 파일을 만들 필요는 없었습니다.
처음 확인한 주소는 이것이었습니다.
https://blog.goodtek.xyz/sitemap.xml브라우저에서 열어보니 정상적으로 표시됐습니다.
Ghost의 사이트맵 화면에는 대략 이런 내용이 보였습니다.
XML Sitemap
This is a sitemap generated by Ghost to allow search engines to discover this blog's content.
Sitemap
https://blog.goodtek.xyz/sitemap-pages.xml
https://blog.goodtek.xyz/sitemap-posts.xml
https://blog.goodtek.xyz/sitemap-authors.xml여기서 중요한 점이 있습니다.
Ghost의 /sitemap.xml은 실제 글 URL이 직접 들어 있는 사이트맵이라기보다, 하위 사이트맵들을 묶어주는 사이트맵 인덱스에 가깝습니다.
구조는 이렇게 되어 있습니다.
/sitemap.xml
├─ /sitemap-pages.xml
├─ /sitemap-posts.xml
└─ /sitemap-authors.xml각 파일의 역할은 다음과 같습니다.
|
사이트맵 |
역할 |
|---|---|
|
/sitemap-posts.xml |
블로그 글 URL 목록 |
|
/sitemap-pages.xml |
페이지 URL 목록 |
|
/sitemap-authors.xml |
작성자 페이지 URL 목록 |
|
/sitemap.xml |
위 사이트맵들을 묶는 인덱스 |
일반적으로는 Search Console에 /sitemap.xml 하나만 제출하면 됩니다. 그러면 Google이 그 안에 있는 하위 사이트맵을 따라가야 합니다.
그런데 Goodtek 블로그에서는 여기서 문제가 생겼습니다.
첫 번째 문제: /sitemap.xml을 가져올 수 없음
Search Console의 https://blog.goodtek.xyz/ URL-prefix 속성에 들어가서 사이트맵을 제출했습니다.
입력한 값은 이것이었습니다.
sitemap.xml그러면 Search Console에서는 실제로 아래 주소를 읽습니다.
https://blog.goodtek.xyz/sitemap.xml그런데 결과가 이렇게 나왔습니다.
상태: 가져올 수 없음
유형: 알 수 없음
발견된 페이지: 0처음에는 사이트맵 주소를 잘못 넣은 줄 알았습니다.
하지만 브라우저에서 직접 열어보면 사이트맵은 정상적으로 열렸습니다. sitemap-pages.xml, sitemap-posts.xml, sitemap-authors.xml도 정상적으로 보였습니다.
그래서 다음으로 robots.txt를 확인했습니다.
https://blog.goodtek.xyz/robots.txt내용은 이랬습니다.
User-agent: *
Sitemap: https://blog.goodtek.xyz/sitemap.xml
Disallow: /ghost/
Disallow: /email/
Disallow: /members/api/comments/counts/
Disallow: /r/
Disallow: /webmentions/receive/
Disallow: /.ghost/analytics/api/이것도 문제 없어 보였습니다.
관리자 페이지나 내부 API 경로만 막고 있었고, 블로그 글이나 사이트맵은 막고 있지 않았습니다.
서버 응답도 확인해봤다
브라우저에서는 정상인데 Search Console에서는 실패한다면, 서버 응답이 이상할 수도 있습니다.
그래서 터미널에서 직접 확인했습니다.
curl -I https://blog.goodtek.xyz/sitemap.xml결과는 정상이었습니다.
HTTP/2 200
content-type: text/xml; charset=utf-8
server: Caddy
x-powered-by: Express
content-length: 538중요한 부분은 이 두 가지입니다.
HTTP/2 200
content-type: text/xml; charset=utf-8즉 사이트맵 주소는 정상적으로 200 응답을 주고 있었고, Content-Type도 XML로 내려오고 있었습니다.
혹시 Googlebot만 막히는지 확인하기 위해 User-Agent를 Googlebot으로 바꿔서 다시 테스트했습니다.
curl -I -A "Googlebot" https://blog.goodtek.xyz/sitemap.xml결과도 정상이었습니다.
HTTP/2 200
content-type: text/xml; charset=utf-8
server: Caddy
x-powered-by: Express
content-length: 538이제 서버, Ghost, Caddy, robots.txt, Googlebot 차단 문제는 아닌 것으로 보였습니다.
RSS도 제출해봤다
확인 과정에서 RSS 주소도 제출해봤습니다.
rss/처음에는 이것도 “가져올 수 없음”으로 보였지만, 시간이 지나면서 정상 처리되었습니다.
결과는 이랬습니다.
/rss/
유형: RSS
상태: 성공
발견된 페이지: 5이 결과는 나름 의미가 있었습니다.
Google이 blog.goodtek.xyz에 접근할 수 있고, Search Console 속성도 정상이며, 서버도 Google 요청을 막고 있지 않다는 뜻이기 때문입니다.
다만 RSS는 사이트맵 전용 파일은 아닙니다. Ghost에서 제공하는 피드입니다.
그래도 Google Search Console에서는 RSS를 URL 발견용 피드로 처리할 수 있고, 실제로 발견된 페이지가 5개로 잡혔습니다.
하지만 블로그 SEO 관리 관점에서 더 중요한 것은 Ghost의 실제 사이트맵입니다.
해결 방법: 하위 사이트맵을 직접 제출
결국 해결 방법은 간단했습니다.
/sitemap.xml 인덱스가 계속 실패한다면, 그 안에 들어 있는 하위 사이트맵을 직접 제출하면 됩니다.
그래서 Search Console에 아래 3개를 직접 제출했습니다.
sitemap-posts.xml
sitemap-pages.xml
sitemap-authors.xml결과는 성공이었습니다.
|
제출한 항목 |
유형 |
상태 |
발견된 페이지 |
|---|---|---|---|
|
/sitemap-authors.xml |
Sitemap |
성공 |
1 |
|
/sitemap-pages.xml |
Sitemap |
성공 |
2 |
|
/sitemap-posts.xml |
Sitemap |
성공 |
4 |
|
/rss/ |
RSS |
성공 |
5 |
|
/sitemap.xml |
알 수 없음 |
가져올 수 없음 |
0 |
이제 중요한 블로그 글 사이트맵인 /sitemap-posts.xml이 성공했고, 실제 글 4개도 발견되었습니다.
이 상태면 실무적으로는 문제 없다고 판단했습니다.
/sitemap.xml이 실패로 남아 있어도, 그 안에 들어 있던 하위 사이트맵을 직접 제출해서 Google이 글과 페이지를 발견할 수 있게 되었기 때문입니다.
최종 사이트맵 상태
최종적으로 Goodtek 블로그의 사이트맵 제출 상태는 이렇게 정리했습니다.
유지할 항목은 다음과 같습니다.
sitemap-posts.xml
sitemap-pages.xml
sitemap-authors.xml
rss/선택적으로 삭제해도 되는 항목은 이것입니다.
sitemap.xml/sitemap.xml은 Ghost의 사이트맵 인덱스라 원래는 정상 처리되는 것이 맞습니다. 하지만 Search Console이 인덱스를 계속 못 읽는 상태라면 굳이 여기에 너무 오래 매달릴 필요는 없다고 봤습니다.
실제 URL이 들어 있는 하위 사이트맵이 성공하면 됩니다.
특히 중요한 것은 이것입니다.
sitemap-posts.xml블로그 글 URL이 들어 있는 핵심 사이트맵이기 때문입니다.
왜 사이트맵 제출이 필요한가?
사이트맵은 검색엔진에게 “내 사이트에는 이런 페이지들이 있다”고 알려주는 지도 같은 역할을 합니다.
물론 Google은 링크를 따라가며 페이지를 발견할 수도 있습니다. 하지만 새 블로그나 새 도메인은 외부 링크가 거의 없기 때문에 Google이 내 글을 발견하는 데 시간이 오래 걸릴 수 있습니다.
사이트맵을 제출하면 Google에게 직접 알려줄 수 있습니다.
여기에 내 글들이 있습니다. 이 URL들을 확인해 주세요.
특히 Goodtek처럼 이제 막 블로그를 시작한 경우에는 사이트맵 제출이 더 중요하다고 생각합니다.
검색 유입이 아직 없고, 외부 링크도 부족하고, 도메인 신뢰도도 쌓이지 않았기 때문입니다.
초기 블로그는 Google이 알아서 찾아오기를 기다리기보다, Search Console을 통해 적극적으로 알려주는 편이 좋습니다.
사이트맵 제출만 하면 바로 색인될까?
아닙니다.
이 부분도 중요합니다.
사이트맵 제출은 “발견”을 돕는 것이지, “색인 보장”은 아닙니다.
Search Console에서 사이트맵 상태가 성공으로 바뀌었다고 해서 모든 글이 바로 Google 검색 결과에 노출되는 것은 아닙니다.
Google은 URL을 발견한 뒤에도 여러 가지를 판단합니다.
이 페이지를 크롤링할 수 있는가?
중복 콘텐츠는 아닌가?
품질이 충분한가?
검색 결과에 넣을 가치가 있는가?그래서 사이트맵 제출 이후에는 중요한 글을 직접 URL 검사에 넣고 색인 요청을 하는 것이 좋습니다.
실제로 진행한 색인 요청
Goodtek 블로그에서는 우선 홈과 주요 글을 URL 검사에 넣어 확인했습니다.
먼저 블로그 홈입니다.
https://blog.goodtek.xyz/그리고 주요 블로그 글 URL들도 확인했습니다.
https://blog.goodtek.xyz/baibeu-kodingeul-cegyejeogeuro-haneun-bangbeob-ai-gaebaleul-reil-wie-olrigi/
https://blog.goodtek.xyz/obsidian-quartz-cloudflare-pagesro-gonggae-gaebalnoteureul-mandeulmyeo-baeun-geos/
https://blog.goodtek.xyz/nodebb-vs-discourse-goodtek-keomyunitireul-nodebbro-sijaghan-iyu/
https://blog.goodtek.xyz/ceos-beulrogeureul-ghostro-sijaghan-iyu/URL 검사에서 접근 가능하다고 나오면 색인 생성 요청을 누르면 됩니다.
사이트맵은 전체 구조를 알려주는 용도이고, URL 검사는 개별 페이지를 빠르게 확인하고 색인 요청하는 용도라고 보면 됩니다.
같은 문제를 겪는다면 이렇게 확인하면 된다
Ghost 블로그를 Search Console에 등록했는데 /sitemap.xml이 “가져올 수 없음”으로 나온다면, 아래 순서로 확인하면 됩니다.
1. 브라우저에서 사이트맵 열기
https://your-domain.com/sitemap.xmlGhost라면 보통 다음과 같은 하위 사이트맵이 보여야 합니다.
sitemap-pages.xml
sitemap-posts.xml
sitemap-authors.xml2. robots.txt 확인
https://your-domain.com/robots.txt아래처럼 사이트맵이 명시되어 있으면 좋습니다.
Sitemap: https://your-domain.com/sitemap.xml반대로 아래처럼 전체 차단이 되어 있으면 안 됩니다.
Disallow: /3. 서버 응답 확인
curl -I https://your-domain.com/sitemap.xml정상 예시는 다음과 같습니다.
HTTP/2 200
content-type: text/xml; charset=utf-84. Googlebot 접근 확인
curl -I -A "Googlebot" https://your-domain.com/sitemap.xml이것도 200이 나와야 합니다.
만약 일반 요청은 200인데 Googlebot 요청만 403이나 503이면 Cloudflare, WAF, Bot 차단, 서버 보안 설정을 확인해야 합니다.
5. 하위 사이트맵 직접 제출
/sitemap.xml이 계속 실패한다면 하위 사이트맵을 직접 제출합니다.
sitemap-posts.xml
sitemap-pages.xml
sitemap-authors.xmlGhost 블로그에서는 이 방식이 가장 실용적인 우회 방법이었습니다.
내가 얻은 결론
이번 시행착오를 통해 배운 점은 단순합니다.
Search Console에서 /sitemap.xml이 실패한다고 해서 무조건 사이트 전체가 잘못된 것은 아닙니다.
중요한 것은 실제로 Google이 내 글 URL을 발견할 수 있느냐입니다.
Goodtek의 경우 /sitemap.xml은 실패했지만, 하위 사이트맵은 모두 성공했습니다.
/sitemap-posts.xml 성공
/sitemap-pages.xml 성공
/sitemap-authors.xml 성공
/rss/ 성공그래서 실질적인 문제는 해결된 상태라고 판단했습니다.
초기 블로그 운영에서는 완벽한 설정 하나에 너무 오래 매달리기보다, 검색엔진이 실제 글을 발견하고 색인할 수 있는 상태를 만드는 것이 더 중요합니다.
이번 작업의 최종 결론은 이렇습니다.
Ghost 블로그는 /sitemap.xml 하나만 제출해도 되는 것이 원칙입니다.
하지만 Search Console에서 /sitemap.xml을 읽지 못하면 하위 사이트맵을 직접 제출하면 됩니다.
중요한 것은 /sitemap-posts.xml이 성공하는 것입니다.
그다음 주요 글은 URL 검사로 직접 색인 요청합니다.
Goodtek 블로그도 이제 Google이 글을 발견할 수 있는 기본 구조는 갖췄습니다.
이제부터 중요한 것은 사이트맵 설정이 아니라, 꾸준히 좋은 글을 쌓는 일입니다.