:bulb: SEO 시리즈 2편. 1편 에서 포스트 한 개 단위의 frontmatter·jekyll-seo-tag·permalink 최적화를 다뤘다. 그런데 그 이후 새 글을 여러 개 push 했는데도 Google Search Console에서 sitemap.xml의 마지막 읽은 날짜(Last read)가 몇 주째 갱신되지 않고, 새 포스트가 색인에 잡히지 않는 문제가 발생했다. 일반론(크롤링 예산, 콘텐츠 품질) 이전에 이 저장소에는 _config.yml 설정 누락이라는 명확한 코드 문제가 있었다. 진단 과정과 해결 방법을 정리한다.

:bulb: SEO 시리즈 구성

  • 1편 — 포스트 단위 SEO: frontmatter, jekyll-seo-tag, permalink·파일명
  • 2편 (이 글) — sitemap이 제대로 갱신되도록: _config.yml의 url·future·timezone 3줄 진단·수정
  • 3편 — 사이트 단위 SEO 감사: sitemap 품질, 검증 메타태그, 누락 description 일괄 보강, 404/아카이브 정리
  • 4편 — Google Search Console 잔여 이슈 정리: 404·리디렉션·”크롤링됨-색인 안 됨” 분류 진단과 noindex 메타태그 적용

환경: Jekyll 3.x + minimal-mistakes + GitHub Pages + jekyll-sitemap 플러그인


[01] 문제 상황

새 포스트를 여러 개 push 했는데도 Google Search Console(GSC)에서 아래 두 가지 증상이 지속됐다.

graph LR
    PUSH["새 포스트 push"] -->|1~2주 경과| GSC["Search Console 확인"]
    GSC --> SITEMAP["Sitemap
Last read 갱신 없음"] GSC --> INDEX["색인 페이지
신규 포스트 미포함"] style PUSH fill:#e3f2fd,stroke:#1565c0 style SITEMAP fill:#ffcccc,stroke:#c62828 style INDEX fill:#ffcccc,stroke:#c62828
증상 기대 실제
Sitemap 마지막 읽은 날짜 주 1회 이상 갱신 수 주 정지
색인 페이지 수 신규 포스트 반영 구 포스트만 존재
sitemap.xml 내용 최신 포스트 포함 일부 누락 가능성

[02] 일반론 먼저 정리 (AI가 흔히 알려주는 원인)

대부분의 답변은 아래 7가지 일반론을 제시한다. 모두 성립하는 원인이지만, 먼저 본인 저장소 설정을 점검한다.

# 원인 판단
1 사이트에 변화가 거의 없음 정상 (문제 아님)
2 lastmod 신뢰도 낮음 (모두 동일 / 실제 수정 없음) 점검 필요
3 사이트 크롤링 우선순위 낮음 (신규 도메인, 트래픽 적음) 시간 해결
4 robots.txt / 리다이렉트 / 접근 오류 점검 필요
5 이전 sitemap 대비 변경 없음으로 판단 정상
6 크롤링 예산 제한 규모 문제
7 Search Console UI 반영 지연 무시 가능

:warning: 위 7가지는 일반론이며, 이 저장소의 실제 원인은 별도였다. 다음 섹션에서 진단 과정을 정리한다.


[03] 실제 원인 진단

_config.yml을 점검한 결과 3가지 핵심 설정 누락이 발견됐다.

graph TD
    ROOT["sitemap 미갱신 원인"] --> C1["(1) url: 비어 있음
→ canonical URL 미생성"] ROOT --> C2["(2) future: 기본값 false
→ 오늘 날짜 포스트 빌드 제외"] ROOT --> C3["(3) timezone: 비어 있음
→ UTC로 해석, KST 날짜 경계 오판"] C1 --> R1["sitemap URL 불완전
Google 신뢰도 하락"] C2 --> R2["새 포스트 자체가
_site/ 에 없음"] C3 --> R3["2026-04-15 작성글이
UTC 환산 시 미래로 인식"] style ROOT fill:#fff3e0,stroke:#e65100 style C1 fill:#ffcccc,stroke:#c62828 style C2 fill:#ffcccc,stroke:#c62828 style C3 fill:#ffcccc,stroke:#c62828

3-1. url: 값이 비어 있음

1
2
3
# 수정 전
url                      : # the base hostname & protocol ...
baseurl                  : # the subpath of your site ...
  • jekyll-sitemapsite.url을 기반으로 sitemap.xml<loc> 절대 URL을 생성
  • 값이 비어 있으면 <loc>/categories/xxx/</loc> 같이 상대경로가 들어가거나 <loc> 누락
  • Google 입장에서는 “sitemap 형식이 이상함” → 신뢰도 하락 → 재크롤링 빈도 감소
  • jekyll-seo-tagcanonical, Open Graph URL도 같은 이유로 생성 실패

3-2. future: 플래그 미설정 (기본값 false)

Jekyll은 기본적으로 미래 날짜 포스트를 빌드에서 제외한다. 이 기본값은 다음 순서로 새 포스트를 sitemap에서 빠뜨린다.

1
2
3
4
5
6
# 현재 시각(UTC 기준): 2026-04-15 23:10
# 포스트 frontmatter: date: 2026-04-16

$ jekyll build
# → 위 포스트는 "미래 글"로 판단되어 _site/ 에 포함 안 됨
# → sitemap.xml 에도 당연히 누락

:warning: timezone이 함께 비어 있으면 한국(KST) 기준 오후에 작성한 글이 UTC 기준으로 다음 날로 환산되어 미래글로 분류된다.

3-3. timezone: 값 누락

1
2
# 수정 전
timezone: # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
  • 빈 값 → Jekyll은 서버(또는 Liquid) 기본 TZ로 해석 (GitHub Pages 빌더 환경은 UTC)
  • 포스트에 date: 2026-04-16 만 적은 경우 KST 00:00 ≠ UTC 00:00 → 날짜 경계 오판
  • future: truetimezone: Asia/Seoul을 함께 설정해야 안정적

[04] 해결: _config.yml 3줄 수정

4-1. 수정 diff

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Site Settings
locale                   : "ko-KR"
title                    : "블로그"
# ...
- url                      : # the base hostname & protocol for your site
- baseurl                  : # the subpath of your site
+ url                      : "https://cmaven.github.io"
+ baseurl                  : ""

# Outputting
permalink: /:categories/:title/
paginate: 5
paginate_path: /page:num/
- timezone: # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
+ timezone: Asia/Seoul
+ future: true # 오늘/미래 날짜 포스트도 빌드에 포함

4-2. 각 설정의 효과

설정 Before After 효과
url (비어 있음) https://cmaven.github.io sitemap <loc> 절대 URL, canonical 태그 생성
baseurl (비어 있음) "" (명시적 빈 문자열) 루트 도메인 운영 명시
timezone (비어 있음) Asia/Seoul KST 기준 날짜 해석
future (기본값 false) true 오늘/미래 날짜 포스트도 빌드/색인

4-3. 반영 확인 절차

sequenceDiagram
    participant Dev as 작성자
    participant Repo as GitHub Repo
    participant GHP as GitHub Pages 빌더
    participant Site as cmaven.github.io
    participant GSC as Search Console

    Dev->>Repo: _config.yml 수정 push
    Repo->>GHP: Pages 빌드 트리거
    GHP->>Site: _site/sitemap.xml 재생성
    Dev->>Site: sitemap.xml 직접 열기 (200 OK 확인)
    Dev->>GSC: Sitemaps 메뉴에서 재제출
    GSC->>Site: sitemap.xml 재크롤링
    GSC-->>Dev: Last read 날짜 갱신

[05] 검증 체크리스트

수정 후 다음 항목을 순서대로 확인하면 원인이 제대로 해결됐는지 확실히 판단할 수 있다.

순서 확인 항목 방법 기대 결과
1 sitemap 접근 가능 curl -I https://cmaven.github.io/sitemap.xml 200 OK
2 sitemap 내 절대 URL 브라우저로 sitemap.xml 열기 <loc>https://cmaven.github.io/...</loc>
3 최신 포스트 포함 sitemap 본문에서 신규 포스트 URL 검색 존재
4 lastmod 다양성 sitemap 내 <lastmod> 값 비교 포스트별로 상이
5 robots.txt 허용 https://cmaven.github.io/robots.txt Sitemap: 라인 존재
6 GSC 색인 요청 Search Console → URL 검사 → 색인 생성 요청 요청 완료 메시지
7 Sitemap 재제출 GSC → Sitemaps → /sitemap.xml 재제출 “성공” 상태

[06] 핵심 교훈

6-1. 일반론보다 내 저장소 설정부터

sitemap 미갱신 문제를 검색하면 “크롤링 우선순위가 낮다”, “Search Console UI 지연이다” 같은 일반론이 대부분이다. 모두 성립하는 원인이지만, _config.yml 3줄을 먼저 확인하는 편이 빠르다.

6-2. Jekyll 기본값에서 생기는 문제

기본값 문제
future: false 오늘 작성한 글이 TZ 차이로 미래글 분류 → sitemap 누락
timezone: (비어 있음) UTC 해석 → KST 기준 날짜 오판
url: (비어 있음) minimal-mistakes 템플릿은 비어있는 채로 배포됨

6-3. GSC “Last read”는 결과 지표

Sitemap Last read 갱신은 Google이 “다시 읽을 가치가 있다”고 판단했을 때 일어난다. 이를 유도하려면:

  • sitemap 내용에 실제 변화가 있어야 함 (url, lastmod)
  • sitemap 형식이 올바라야 함 (절대 URL, 정상적인 <loc>)
  • 사이트에 새로 작성하거나 수정한 콘텐츠가 꾸준히 있어야 함

:star: 이번 케이스는 “크롤링 예산 부족”이 아니라 “sitemap에 신규 포스트가 애초에 포함되지 않았던” 문제였다. future: trueurl 설정이 이 문제를 해결했다.


[07] 다음 편 예고

_config.yml 3줄 수정으로 sitemap이 제대로 생성·갱신되기 시작하면, 다음 단계는 sitemap의 내용물 자체를 점검하는 것이다. 자동 생성된 sitemap에는 포스트뿐 아니라 카테고리, 태그, pagination 같은 저가치 archive URL이 함께 들어가 있어서, Google이 sitemap 전체를 저품질로 판단할 수 있다.

3편 에서는 저장소 전체를 SEO 감사하면서 발견한 5가지 문제(저가치 URL 혼재, 검증 메타태그 누락, description 누락 9개, 404 페이지 부재, C/C++ 옛 글 미정리)와 일괄 수정 방법을 정리한다. 이어 4편 은 sitemap 등록 이후 Search Console에 남는 4가지 분류(404/리디렉션/크롤링됨-색인 안 됨/검색됨-크롤링 안 됨)의 잔여 이슈를 noindex 메타태그·trailing slash 정리로 마무리한다.


[08] 참고