WANY BLOG에는 Rank Math가 설치되어 있었지만, 사이트맵은 WordPress 기본 기능을 쓰는 쪽으로 정리했다. 일본어 도구 페이지처럼 별도로 관리해야 하는 URL도 WordPress Core 사이트맵에 직접 추가하는 구조였다.
처음 정리한 코드는 단순했다. Rank Math의 sitemap 모듈을 빼고, /wp-sitemap.xml은 WordPress가 담당하게 했다.
add_filter('rank_math/modules', static function (array $modules): array {
unset($modules['sitemap']);
return $modules;
}, 20);
여기까지만 보면 사이트맵 소유권이 WordPress로 넘어간 것처럼 보인다. 그런데 실제 구성에서는 한 단계가 더 필요했다.
sitemap 모듈을 빼도 Core 사이트맵이 켜진다는 보장은 없었다
WordPress에는 XML 사이트맵 자체를 켜고 끄는 wp_sitemaps_enabled 필터가 있다.
WordPress 공식 문서를 보면 이 값이 false가 되더라도 sitemap rewrite 규칙은 남는다. 대신 실제 요청에는 404가 반환된다.
이 차이가 조금 헷갈린다. URL 규칙이 존재한다고 해서 사이트맵 서버까지 활성화되어 있다는 뜻은 아니다.
WANY 구성에서는 Rank Math sitemap 모듈을 제외한 뒤에도 Core 사이트맵이 다른 필터 영향으로 꺼진 상태가 남을 수 있었다. 그래서 사이트맵 소유자를 WordPress로 정한 이상, Core 쪽 활성화도 명시적으로 고정했다.
add_filter('wp_sitemaps_enabled', '__return_true', PHP_INT_MAX);
PHP_INT_MAX를 쓴 이유는 앞에서 다른 코드가 값을 바꾸더라도 마지막에 WANY의 결정을 적용하기 위해서다.
이 코드를 다른 WordPress 사이트에 그대로 넣어야 한다는 뜻은 아니다. Rank Math 사이트맵을 그대로 쓸 예정이라면 굳이 Core 사이트맵을 강제로 켤 이유가 없다. WANY에서는 사이트맵을 두 군데가 동시에 관리하지 않도록 WordPress Core를 한쪽 소유자로 정했기 때문에 필요한 처리였다.
기존 sitemap_index.xml도 바로 없애지 않았다
사이트맵 소유자를 바꾸면서 URL도 달라졌다.
WordPress Core가 pretty permalink를 사용하는 경우 기본 사이트맵 인덱스는 /wp-sitemap.xml이다. Rank Math에서 사용하던 /sitemap_index.xml은 그대로 두면 이전과 같은 역할을 하지 않는다.
기존 경로를 바로 끊는 대신 /wp-sitemap.xml로 301 이동시키도록 했다.
add_action('template_redirect', static function (): void {
if (wany_request_path() !== 'sitemap_index.xml') {
return;
}
wp_safe_redirect(home_url('/wp-sitemap.xml'), 301, 'WANY Sitemap Compatibility');
exit;
}, 0);
이렇게 하면 새 기준 주소는 /wp-sitemap.xml 하나로 유지하면서도, 예전 /sitemap_index.xml로 들어오는 요청을 버리지 않을 수 있다.
사이트맵을 바꿀 때 새 URL만 정상인지 보고 끝내기 쉬운데, 이전 URL을 외부에서 이미 알고 있을 가능성도 같이 생각할 필요가 있었다.
마지막에는 두 주소를 같이 확인했다
수정 뒤에는 코드가 들어갔다는 것만 확인하지 않았다.
회귀 테스트에서 /wp-sitemap.xml을 읽어 XML sitemap index로 파싱하고, /sitemap_index.xml도 요청해서 같은 종류의 sitemap 응답으로 이어지는지 확인하도록 했다.
또 Core sitemap provider에 실제로 들어가야 하는 일본어 경로만 포함되는지도 별도로 검사했다. 존재하지 않는 페이지나 indexable하지 않은 도구를 억지로 sitemap에 넣지 않는 쪽이다.
현재 구조를 짧게 적으면 이렇다.
/wp-sitemap.xml
└─ WordPress Core가 관리하는 기준 사이트맵
/sitemap_index.xml
└─ 301 → /wp-sitemap.xml
이번에 문제가 됐던 부분은 XML을 만드는 코드 자체보다 사이트맵의 소유자가 누구인지 애매하게 남아 있던 상태였다.
Rank Math의 sitemap 기능을 사용하지 않기로 했다고 해서 WordPress Core sitemap이 자동으로 원하는 상태가 되는 것은 아니었다. Core를 쓸 거라면 wp_sitemaps_enabled 상태까지 확인하고, 기존 sitemap URL을 이미 운영하고 있었다면 그 경로를 어떻게 넘길지도 같이 정하는 편이 깔끔하다.