출처 : 한글태그 오류 수정하기
워드프레스 한글 태그 검색시 404 오류 해결하기
By 2012.05.20
Share the post “워드프레스 한글 태그 검색시 404 오류 해결하기”
워드프레스를 세팅하다 보면 접하게 되는 이슈들이 가끔 있죠. 특히 국내 사이트를 작업하다 보면 언어 차이때문에 발생하는 문제들이 간혹 있습니다. 고유주소(Permalink)와 관련한 문제들도 여기에 속하는데 특히 한글 태그 검색이 제일 골치더군요. 그렇다고 고유주소를 안 쓰기도 좀 그렇죠? ^^
주소 관리가 쉽다는 측면도 있겠지만, SEO 1를 위해서라도 필수로 거쳐야 할 과정이죠. SEO를 위해 고유주소 체계를 포스트 제목으로 설정하고 싶지만 이 역시 한글 문제 때문에 전 숫자로 하곤 하는데, 여전히 남아 있는 문제는 한글 태그입니다.
예) 워드프레스 라는 태그는 http://www.website.com/archives/tag/워드프레스 와 같은 주소체계를 갖게 되는데 이럴 경우 페이지를 찾을 수 없는 상황이 발생하게 됨
이 문제는 파일 시스템의 인코딩과 브라우저에서 요청하는 URL 인코딩이 서로 다른 경우에 발생하게 되는데 mod_url 모듈 2이 정상적으로 동작한다면 전혀 신경 쓸 필요가 없습니다. 문제는 그렇지 않은 경우인데 꽤 많은 호스팅 업체에서 이런 이유로 한글 주소가 지원이 안 되더군요. 그래서 이런 환경에선 결국 404 file not found 페이지로 친절하게 안내되게 됩니다.
가장 널리 알려져 있는 해결 방법은 mod_url의 문자 인코딩이 안 맞는 경우에 .htaccess 파일을 수정 하는 겁니다. 서버 인코딩이 euc-kr로 되어 있다면 utf-8 주소를 인식 못하기 때문에 아래 내용을 .htaccess 에 추가해서 해결하는 것이죠.
<IfModule mod_url.c>
ServerEncoding UTF-8
ClientEncoding EUC-KR
</IfModule>
하지만 이 방법으로도 해결이 안 되는 경우가 있더군요. 아마도 mod_url이 아예 지원이 안 되는 환경일텐데 그렇다면, 이런 호스팅을 이용할 때 한글 태그는 포기해야 할까요??? 물론 SEO에는 위배되겠지만, 한글 태그를 버릴 수도 없기 때문에 고육지책으로 태그에 링크되는 주소를 바꿔서 오류를 없애는 방법을 생각해 봤습니다. 즉, http://www.website.com/archives/tag/워드프레스 와 같은 주소 체계를 http://www.website.com/?tag=워드프레스 와 같은 일반적인 파라미터 형태로 치환하도록 한 것이죠. 그러기 위해 소스 코드 몇 군데를 뜯어 고쳐서 링크 주소를 바꿔 보도록 하겠습니다. 해당 페이지는 wp-includes/catetory-template.php 와 wp-includes/template-loader.php 입니다.
?wp-includes/catetory-template.php
이 페이지에서는 2군데를 수정합니다. 모두 태그에 걸리는 링크를 생성하는 부분입니다.
먼저 태그 클라우드의 링크를 수정하기 위해 wp_tag_cloud 함수를 찾으신 후, 함수 내에 있는 아래 코드 부분을 보세요.
foreach ( $tags as $key => $tag ) {
if ( ‘edit’ == $args[‘link’] )
$link = get_edit_tag_link( $tag->term_id, $tag->taxonomy );
else
$link = get_term_link( intval($tag->term_id), $tag->taxonomy );if ( is_wp_error( $link ) ) return false;
$tags[ $key ]->link = $link;
$tags[ $key ]->id = $tag->term_id;
}
2~5 라인이 태그 클라우드에서 태그별로 걸릴 링크를 생성하는 부분인데 이 곳을 아래와 같이 수정합니다.
foreach ( $tags as $key => $tag ) {
/* 원본 주석 처리
if ( ‘edit’ == $args[‘link’] )
$link = get_edit_tag_link( $tag->term_id, $tag->taxonomy );
else
$link = get_term_link( intval($tag->term_id), $tag->taxonomy );
*/
$link = “/?tag=”.$tag->name; //새 링크 생성if ( is_wp_error( $link ) ) return false;
$tags[ $key ]->link = $link;
$tags[ $key ]->id = $tag->term_id;
}
다음은 포스트의 태그 정보에 걸리는 링크 수정입니다. 마찬가지로 get_the_term_list 함수를 찾으신 후, 함수 내에 있는 아래 코드 부분을 보세요.
foreach ( $terms as $term ) {
$link = get_term_link( $term, $taxonomy );
if ( is_wp_error( $link ) )
return $link;
$term_links[] = ‘<a href=”‘ . $link . ‘” rel=”tag”>’ . $term->name . ‘</a>’;
}
5 라인이 태그 클라우드에서 태그별로 걸릴 링크를 생성하는 부분인데 이 곳을 아래와 같이 수정합니다.
foreach ( $terms as $term ) {
$link = get_term_link( $term, $taxonomy );
if ( is_wp_error( $link ) ) return $link;//원본 주석 처리
//$term_links[] = ‘<a href=”‘ . $link . ‘” rel=”tag”>’ . $term->name . ‘</a>’;
$term_links[] = ‘<a href=”/?tag=’ . $term->name . ‘” rel=”tag”>’ . $term->name . ‘</a>’; //새 링크 생성
}
2.?wp-includes/template-loader.php
이렇게 링크를 모두 바꾸면 끝나는 경우도 있긴 하지만, 테마에 따라서 template-loader에서 고유주소로 다시 이동시키기 때문에 반영이 안 되는 경우가 있습니다. 그럴 경우 template-loader.php를 살짝 손 봐줘야 합니다. 파일 제일 처음 부분 보시죠.
1 |
/** |
2 |
* Loads the correct template based on the visitor's url |
3 |
* @package WordPress |
4 |
*/ |
5 |
if ( defined('WP_USE_THEMES') && WP_USE_THEMES ) |
6 |
do_action('template_redirect'); |
5, 6 라인에서 주소를 다시 redirect시켜 버리기 때문에 태그 주소 애써 바꿔놓은게 반영이 안되는 거죠. 따라서 이 부분을 아래와 같이 살짝 고쳐줍니다.
1 |
/** |
2 |
* Loads the correct template based on the visitor's url |
3 |
* @package WordPress |
4 |
*/ |
5 |
if ($tag == '') { |
6 |
if ( defined('WP_USE_THEMES') && WP_USE_THEMES ) |
7 |
do_action('template_redirect'); |
8 |
} |
request되는 $tag 값이 있을 경우 redirect 하지 않겠다는 꼼수 코드입니다. ^^ 이제 사이트 내 모든 태그의 링크 주소가 바뀌었고 한글 태그도 이상없이 검색되게 됩니다.
만약 태그 클라우드 플러그인을 사용하여 사이드바를 구성했다면 그 플러그인도 위와 같은 방식으로 링크 주소를 바꿔주시면 됩니다.물론 이 방법이 최선은 아닙니다. 가장 좋은 건 mod_url을 이용해 한글 주소를 지원하도록 서버를 구성하는 것이겠죠.?다만, 부득이한 경우에 한글 태그를 처리할 수 있는 하나의 방법일 수는 있겠다 싶어 공유합니다.?부디 SEO에 위배된다거나 하는 딴지는 피해 주시길.. ^^
Share the post “워드프레스 한글 태그 검색시 404 오류 해결하기”

