검색 엔진 웹 크롤러를 위한 워드프레스 사이트맵

사이트맵은 블로그나 웹사이트의 접근 가능한 페이지 목록을 나열하는 파일로 간단하게 정의할 수 있습니다. 특정 사이트 웹페이지(콘텐츠) 전체 계층 구조를 구글이나 다른 검색 엔진에 체계적인 방식으로 알리는 역할을 합니다. 검색 봇에게 사이트 콘텐츠를 쉽게 알려 검색 엔진의 검색 결과 반영에 도움을 얻기 위한 것입니다.

또, 사이트맵에 웹페이지와 연관된 특정 메타 데이터를 제공하여 검색 봇에게 좀 더 확장한 웹페이지 세부 정보를 전달함으로써 최상의 검색 결과 반영을 도모할 수 있습니다. 메타 데이터에는 다음과 같은 대표적인 일부 항목을 포함할 수 있으며, 전체는 아닙니다.

  • 웹페이지 업데이트 시각
  • 웹페이지 변경 주기
  • 웹페이지 중요도 (우선순위)

웹페이지만 나열한 사이트맵이 일반적이지만, 웹페이지에 포함된 동영상이나 이미지 등을 분리된 사이트맵으로 생성하여 검색 봇에게 제공할 수도 있습니다. 이때 검색 봇이 사이트에서 찾기 어려운 웹페이지 내 콘텐츠에 관한 추가 검색 결과를 얻어 사이트 유입 트래픽 증가를 기대할 수 있습니다.

워드프레스의 경우 특정 포스트 타입(Post Types), 분류(Taxonomies, Term), 저자(Author), 월 또는 년도 등의 기준으로 분리된 사이트맵 생성을 돕는 기능이 풍부하므로, 이 기능을 사용한 사이트맵을 제공한다면 최소한 검색 엔진의 검색 결과 수(색인)는 증가하므로 트래픽 상승의 효과를 충분히 기대할 수 있습니다.

사이트맵 생성과 제공을 통한 결과적 이득은 검색 엔진에 따라 차이가 크므로 관련한 모든 내용이 절대적이거나 일반적인 사항으로 생각하지 않아야 합니다. ‘가능성’을 염두에 둔 ‘최소한 준비’ 정도로 생각하는 것이 좋습니다.

이 포스트에서는 사이트맵을 구성하는 세부 기술 요소보다, 주요 검색 엔진에 제출할 수 있는 워드프레스 사이트맵 생성에 관하여 워드프레스 저장소 플러그인 기준으로 가볍게 알아보는 데 초점을 둡니다.

또, 이후의 모든 내용은 포스트 작성 시점 기준이므로 특정 플러그인 업데이트나 특정 검색 엔진 서비스의 정책에 따라 달라질 수 있으므로 항상 검색 엔진의 기준 정책을 먼저 파악하는 것이 선행되어야 함을 기억하세요.

워드프레스에서 사이트맵을 생성하는 주요 플러그인

사이트맵을 생성하는 플러그인은 많지만, 저장소 플러그인 2가지와 직접 만드는 방법에 관하여 알아봅니다.

Jetpack Sitemaps Module

저장소에서 받아 쉽게 설치하고 사용할 수 있는 Jetpack 플러그인은 아주 복잡한 플러그인입니다. 그러나, 분석할 필요 없이 원하는 기능의 모듈만 활성화하면 즉시 적용할 수 있는 편리함과 더불어 워드프레스 사용의 기본 상징이 될 정도로 지속해서 개선되며 성장하는 플러그인입니다.

Jetpack 사이트맵 모듈 활성화

플러그인 Jetpack 모듈 활성화는 위의 그림처럼 버튼으로 쉽게 처리할 수 있으며, 활성화한 후 나오는 주소가 사이트맵 주소이므로 검색 엔진이 요구하는 전체 주소 또는 사이트맵 파일 이름만 등록하면 됩니다.

그런데, Jetpack 플러그인이 생성 및 제공하는 사이트맵은 2가지로 sitemap.xml 사이트맵이 보통 웹사이트의 사이트맵으로 부르는 파일이며, news-sitemap.xml 사이트맵은 구글 뉴스에만 적용되는 것으로 48시간 동안 게시(공개)된 포스트만 포함하여 생성됩니다. 이 뉴스 사이트맵은 일반 사이트맵처럼 구글(Google Search Console)에 별개의 사이트맵으로 등록해야 합니다. 이 부분은 추가 검색을 통해 정보를 습득하기 바랍니다.

다음 그림은 sitemap.xml 사이트맵 파일로 브라우저에서 접근했을 때 나오는 하위 사이트맵 목록입니다.

Jetpack XML Sitemap Index

1번 sitemap-1.xml 파일이 워드프레스 포스트 목록 사이트맵으로 보통 사용하는 사이트맵입니다. 2번은 이미지 포스트(attachment type post) 목록으로 워드프레스에서 이미지 콘텐츠도 포스트이며, 기본 포스트 타입의 하나이므로 분리하여 제공하는 것으로 짐작합니다.

커스텀 포스트 타입Custom Post Types의 포스트는 Jetpack 사이트맵에 기본으로 추가되지 않으므로 제공하는 jetpack_sitemap_post_types 필터 훅을 사용한 코드를 추가해야 합니다.

add_filter( 'jetpack_sitemap_post_types', 'add_cpt_sitemaps' );
function add_cpt_sitemaps( $post_types ) {
    $post_types[] = 'custom_post_type_name'; // 커스텀 포스트 타입 이름
    return $post_types;
}

코드 사용이 익숙하지 않더라도 위의 코드 3번 줄 커스텀 포스트 타입 이름만 변경하여 추가하면 되므로 어렵지 않습니다.

Google XML Sitemaps

사이트맵 생성의 기능만 제공하는, Google XML Sitemaps 플러그인은 설명하지 않아도 되는 가장 대중적인 사이트맵 생성 플러그인입니다. 플러그인 이름에 ‘Google’이 있다고 해서 구글에만 적용되는 것은 아니며, 야후, 빙(Bing)과 같은 검색 엔진도 인식하므로 걱정할 필요가 없습니다.

사이트 콘텐츠 업데이트에 따른 사이트맵 변경 시 구글, 야후, 빙 검색 엔진에 알려주거나 Nginx 웹서버 환경에서 발생할 수 있는 오류 문제 해결 방법도 제공하며, 사이트맵에 제외 또는 추가할 워드프레스 싱글 및 아카이브 페이지를 선택할 수 있어 편리합니다.

워드프레스 저장소 플러그인 중 사이트맵 생성 플러그인은 많지만, 부가 옵션 기능을 포함하여 배포하는 플러그인이 많으므로 사이트맵 생성 기능만을 제공하는 이 플러그인이 가장 효율적이며 안정적인 플러그인으로 볼 수 있습니다. 그러나, Jetpack 사이트맵 또는 다른 사이트맵 플러그인이 좋지 않다는 뜻이 아니므로 일정 기간 다양한 경험 후 선택해도 됩니다.

검색 엔진마다 다른 사이트맵 등록

Jetpack 사이트맵 또는 Google XML Sitemaps 플러그인처럼 상위 사이트맵 포함 3개 또는 무한의 사이트맵이 존재할 때 어떤 사이트맵을 검색 엔진에 등록해야 하는지 의문을 가질 수 있습니다. 사용자 편리 기준에서는 sitemap.xml 하나만 등록하면 하위 사이트맵까지 검색 엔진이 자동으로 처리하는 게 좋겠지만, 그렇지 않은 때가 있습니다.

먼저, 구글(구글 웹마스터)의 경우에는 sitemap.xml 파일과 같은 상위 사이트맵 하나만 등록하면 나머지 하위 사이트맵을 자동으로 처리합니다. 그러나, 네이버(네이버 웹마스터)의 경우 Jetpack 사이트맵 sitemap.xml 파일을 등록하면 등록되지 않습니다. sitemap-1.xml 파일을 등록해야 합니다.

구글 웹마스터

그러나, 네이버의 경우 Google XML Sitemaps 플러그인을 사용할 때 생성되는 sitemap.xml 파일은 등록됩니다. 이 플러그인으로 생성되는 하위 사이트맵은 운영하는 사이트 특성(태그, 카테고리, 커스텀 분류, 커스텀 포스트 타입, 사용자 등) 및 설정에 따라 수많은 하위 사이트맵이 생성되는데도 Jetpack 사이트맵과 다르게 등록이 됩니다. 실제로 색인 결과에 싱글 포스트 외에는 반영이 되지 않는 하위 사이트맵이 있다고 해도 하나의 사이트맵 파일만 사용하면 되므로 편리합니다.

네이버 웹마스터

구글은 어떤 사이트맵을 등록하더라도 모두 인식하므로 문제가 없습니다. 따라서 네이버와 구글에 하나의 사이트맵을 사용하고 싶다면 Google XML Sitemaps 플러그인을 사용하여 사이트맵을 생성하는 것이 더 유리합니다.

(포스트 작성 기준이므로 우선 상위 사이트맵을 등록 후 결과를 확인해야 하며, 검색 엔진 서비스의 정책에 따라 달라질 수 있음을 기억하세요.)

플러그인 사용하지 않고 사이트맵 생성하기

사이트맵 플러그인을 사용하지만, 특정 검색 엔진에는 특정 사이트맵을 제공해야 할 때가 생겼거나 저장소 플러그인에서 제공하는 사이트맵에 만족하지 못하여 직접 만들고 싶을 때, 또는 워드프레스 사이트 내에 간단한 사이트맵 페이지를 제공할 때 워드프레스 함수와 훅으로 만들 수 있습니다. 완전한 코드를 안내하는 것은 아니며 짧은 흐름 정도로 생각한다면 다음처럼 정리할 수 있습니다.

<?php
add_action( 'publish_post', 'custom_create_sitemap' );
add_action( 'publish_page', 'custom_create_sitemap' );
add_action( 'save_post', 'custom_create_sitemap' );
add_action( 'save_page', 'custom_create_sitemap' );

function custom_create_sitemap() {

    // 사이트맵에 포함할 포스트 쿼리

    // 사이트맵 출력 내용

    // 사이트맵 요청 시 생성
}

관리페이지에서 활성화가 가능하도록 간단한 워드프레스 플러그인 형식을 추가하면 좋습니다.

<?php
/**
 * Plugin Name: 특화 사이트맵
 * Description: 특정 요소에 사용할 사이트맵
 * 
 */

사이트맵을 즉시 업데이트하고 싶은데 save_post, save_page 훅이 있는 4, 5번 줄이 없다면 불편한 때가 있습니다.

특정 검색 엔진 제출보다는 워드프레스 사이트 내에서 간단한 사이트맵 콘텐츠를 제공할 때 검토하면 좋고, 이미 공개된 수많은 코드가 있으므로 검색하여 적절히 응용하면 됩니다.

사이트맵과 워드프레스 캐시 플러그인

사이트맵을 찾을 수 없다는 오류를 해결하기 위해 애태우는 워드프레스가 사용자가 가끔 출현합니다. 이유는 많고 각자의 환경은 다양하겠지만, 2가지만 나열하면 다음과 같습니다.

  • Google XML Sitemaps 플러그인을 사용하는데, 서버 환경이 혹시 Nginx일 때
  • WP Super Cache 등의 캐시 플러그인 사용 중일 때

Nginx

Nginx일 때 문제는 가상 호스트 등의 설정 시 server 블록에 다음 코드 정도를 추가하고 확인하는 방법을 플러그인에서 안내하고 있습니다.

server {
    listen       443 ssl http2;
    server_name  wpu.kr;
    root   /wordpress/bulletproof/www;
    
    # XML 사이트맵을 위한 설정
    rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml$ "/index.php?xml_sitemap=params=$2" last;
    rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$ "/index.php?xml_sitemap=params=$2;zip=true" last;
    rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html$ "/index.php?xml_sitemap=params=$2;html=true" last;
    rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$ "/index.php?xml_sitemap=params=$2;html=true;zip=true" last;
    
    ......
    
}

워드프레스 캐시 플러그인 사용 중일 때

사이트맵 오류의 사이트를 보면 캐시 플러그인을 사용하는 때가 많습니다. 캐시 플러그인이 사이트맵 파일까지 캐시하는 데에서 발생하는 연관 오류 정도로 생각하는 게 좋겠습니다.

해결 방안은 , 캐시 플러그인의 제외할 페이지나 파일명 설정 항목에 사이트맵 파일명을 입력하고 저장 후 캐시 파일을 재생성하고, 다시 사이트맵을 확인하면 보통의 경우 해결될 것으로 생각합니다.

그리고 반드시 관리페이지 퍼머링크 설정 페이지에서 업데이트 버튼을 클릭하여 퍼머링크 데이터를 갱신해야 합니다.

정리

검색 엔진 웹 크롤러를 위한 워드프레스 사이트맵은 플러그인을 사용하는 것이 더 편리하고 효율적이며, 서버 환경이 Nginx일 때의 오류 처리 방법을 대비하는 것과 WP Super Cache 등의 캐시 플러그인을 사용할 때 사이트맵 파일을 캐싱에서 제외하는 것이 필요합니다.