Nginx 환경 sitemap 의 content-type이 – text/xml로 나오고 x-robots-tag가 noindex로 나오는 문제 해결기 (직접 만든 워드프레스 플러그인 포함) 워드프레스를 운영하던 중, 구글 서치 콘솔에서 이상한 메시지를 보게 됐습니다.
사이트맵을 제출했는데 계속해서 “사이트맵을 읽을 수 없음“, “지원되지 않는 콘텐츠 형식입니다” 같은 알림이 반복됐죠.
별거 아닐 줄 알고 넘겼는데, 문제는 이게 검색 결과 노출에 직접적인 영향을 줄 수 있다는 점이었습니다.
Nginx 환경 sitemap 에서 가끔 이런 문제가 생긴다고 합니다. 그래서 결국 해결을 했는데 다른 분들은 저와 같은 시행착오를 겪지 말기를 바라며 도움이 되고자 이 글을 포스팅 합니다.

사이트맵 헤더 문제 해결
무슨 문제가 있었을까? nonidex 그리고 text/xml
사이트맵 주소를 직접 브라우저에서 확인해봤습니다.
그런데 응답 헤더를 보니 뭔가 이상했어요.
테스트 해보고 싶으신 분은 아래의 응답 체크 방법의 명령어를 따라 해보세요.
Content-Type: text/xml
X-Robots-Tag: noindex, follow
정상적인 사이트맵이라면 Content-Type
은 application/xml
이어야 하고,X-Robots-Tag
는 최소한 index, follow
또는 아예 없어야 합니다.
즉, 검색 엔진이 인식하지 않는 사이트맵을 제출하고 있었던 셈입니다.
원인을 찾기까지
조사해보니 이 문제는 특히 아래와 같은 조건일 때 자주 발생합니다:
- 워드프레스 + Nginx 조합 (LEMP 서버)
- AIOSEO 또는 Yoast 등 SEO 플러그인을 사용하는 경우
- 콘텐츠 헤더가 제대로 전달되지 않거나, PHP-FPM/nginx 캐시 간 충돌
- 일부 보안 설정에서
text/xml
을 기본으로 내려주는 경우
심지어 .htaccess
파일이 없기 때문에 아파치에서 쓰던 방식이 안 통한다는 점도 한몫 했습니다.
해결 방법은?
nginx 설정만 수정해서는 해결이 쉽지 않다는 결론을 내렸습니다.
그래서 직접 문제를 우회할 수 있는 워드프레스 플러그인을 만들었습니다.

✔️ 플러그인 주요 기능
sitemap_index.xml
부터post
,page
,category
,tag
,author
까지 사이트맵 자동 생성- 헤더에
Content-Type: application/xml; charset=UTF-8
자동 지정 X-Robots-Tag: index, follow
강제 설정- Yoast, AIOSEO 등이 꺼져 있어도 정상 작동
- 캐시 없이 동적으로 작동하여 별도 정적 파일이 필요 없음
- 새로운 글/페이지/카테고리/태그/작성자 생성 시 즉시 반영
다운로드
▶ 플러그인 이름: Siuuuu Sitemap Generator
▶ 직접 제작자: 씨우 블로그 (https://siuuuu.cc/)
▶ 다운로드:
워드프레스 관리자 → 플러그인 업로드 → 활성화만 해주시면 바로 작동합니다.
파일 내용을 열어서 직접 확인해보시고 설치하셔도 도움이 됩니다.
🔍 구글 서치콘솔에 제출 시
https://yourdomain.com/sitemap_index.xml
정상 응답이 나오고,
application/xml
index, follow
- sitemap index 내부에 각종 분류 항목이 포함
모두 제대로 동작합니다.
응답 체크 방법
윈도우 PowerShell:
$response = Invoke-WebRequest -Uri "https://yourdomain.com/sitemap_index.xml" -Method Head
$response.StatusCode
$response.Headers
리눅스 :
curl -I -L -H "Cache-Control: no-cache" https://yourdomain.com/sitemap_index.xml
기대되는 정상 응답:
HTTP/2 200
content-type: application/xml; charset=UTF-8
x-robots-tag: index, follow
만약text/xml
이거나x-robots-tag: noindex
라면 여전히 문제가 남아있는 상태입니다.
기존 sitemap 비활성화 팁
Yoast나 AIOSEO 등 기존 플러그인을 계속 사용하신다면, sitemap만 비활성화해 주세요:
- Yoast: 설정 > 기능 > XML 사이트맵 끄기
- AIOSEO: AIOSEO > Sitemap > 일반 > 비활성화
직접 고치려고 해봤던 노가다 방법들 (그리고 왜 안 됐는지)
사이트맵이 text/xml
로 뜨고 noindex
로 인식되길래 처음엔 플러그인 없이 직접 고치려고 했습니다.
그때 했던 방법은 대략 이렇습니다:
1. Nginx 설정 파일 수정 (default
혹은 site-enabled
내)
경로: /etc/nginx/sites-available/default 보통 이 경로에 있습니다.
location = /sitemap.xml {
default_type application/xml;
add_header Content-Type "application/xml; charset=UTF-8";
add_header X-Robots-Tag "index, follow";
try_files $uri =404;
}
수정 했으니
sudo nginx -t # 설정 문법 검사
sudo nginx -s reload # 정상이면 가볍게 재적용
sudo systemctl restart nginx # 여전히 문제 있으면 완전 재시작
이걸 nginx 설정에 넣고 reload 했지만…
❌ 문제: sitemap.xml이 실제 PHP 동작 결과가 아니라 정적 파일로 처리돼버림 → 콘텐츠가 없음
❌try_files
가 실제 WordPress 리라이트와 충돌
❌ 캐시 또는 FastCGI 설정과 겹치면서 헤더가 적용되지 않거나 무시됨
2. functions.php에 헤더 삽입 코드 추가
add_action('send_headers', function () {
if ( strpos($_SERVER['REQUEST_URI'], 'sitemap') !== false ) {
header_remove('Content-Type');
header('Content-Type: application/xml; charset=UTF-8');
header('X-Robots-Tag: index, follow');
}
});
이 방법도 실제 사이트맵 응답 시엔 아무 반응이 없었습니다.
이유:
- SEO 플러그인(AIOSEO, Yoast 등)이 sitemap을 자체적으로 완성된 형태로 출력하기 때문에,
functions.php
의 header 조작이 이미 지나간 시점이라 덮어쓰기가 불가능함- 일부 상황에선 헤더가 중복되거나 충돌함
💡 결론: 플러그인으로 뽑아내는 게 가장 깔끔하고 정확함
사실 워드프레스는 5.5 버전부터 wp-sitemap.xml
이라는 기본 사이트맵 기능을 제공합니다.
그런데도 제가 별도의 사이트맵 플러그인을 만든 이유는 아래와 같습니다:
wp-sitemap.xml은 커스터마이징이 매우 제한적입니다
기본 사이트맵은 Nginx 환경에서 헤더 이슈가 자주 발생합니다
결국 만든 위 문제들을 우회하기 위해:
- sitemap 주소 자체를 워드프레스
rewrite
로 지정하고 - 헤더를 PHP에서 직접 출력하며
- 정적인 sitemap 파일 없이 DB 내용을 즉시 반영하게 만들어졌습니다.
마무리하며
이번 문제는 정말 단순한 거 하나에서 시작된 건데, 결국 사이트 전체 SEO가 막혀버릴 수도 있었던 심각한 이슈였습니다.
같은 문제로 고생 중인 분들이 있다면 이 플러그인이 도움이 되었으면 좋겠습니다.
혹시 적용 중 궁금한 점이나 기능 개선이 필요하면 댓글이나 이메일 주세요.
(저도 틈날 때마다 조금씩 개선해보려고 합니다!)
워드프레스 관련 글
1 thought on “Nginx 환경 sitemap 문제 – text/xml 또는 noindex문제 해결 방법”