사이트맵은 웹사이트 관리자가 검색 엔진에 자신의 웹사이트에서 크롤링할 수 있는 웹페이지 링크가 무엇인지 편리하게 알려줄 수 있습니다. 가장 간단한 사이트맵 형식은 sitemap.xml 파일로, 그 안에 웹사이트의 URL과 각 URL에 대한 기타 메타데이터(예: 마지막 업데이트 시간, 변경 빈도 및 웹사이트의 다른 URL과 비교한 중요도)를 나열하여 검색 엔진이 웹사이트를 더욱 지능적으로 크롤링할 수 있도록 합니다.
WordPress에서 sitemap.xml 사이트맵을 생성하기 위해 국내에서는 이미 전문 플러그인이 개발되어 있습니다. 예를 들어 비교적 잘 알려진 류청의 Baidu Sitemap Generator가 있으며, 해외에는 Google XML Sitemaps가 있습니다.
하지만 sitemap.xml 파일 하나를 생성하기 위해 플러그인을 사용하는 것은 다소 리소스 낭비라는 생각이 들어서 코드로 구현해 보겠습니다! 코드는 인터넷에서 찾은 것으로, 약간 수정하여 태그와 카테고리의 XML 생성을 지원하고 sitemap.xml 생성 시간을 추가했습니다.
PHP 코드
새 sitemap.php 파일을 만들고 다음 코드를 해당 파일에 작성합니다.
<?php
require('./wp-blog-header.php');
header("Content-type: text/xml");
header('HTTP/1.1 200 OK');
$posts_to_show = 1000;
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">';
?>
<!-- 生成时间 <?php echo $showtime = date("Y-m-d H:i:s"); ?> -->
<url>
<loc><?php echo get_home_url(); ?></loc>
<lastmod><?php $ltime = get_lastpostmodified(GMT); $ltime = gmdate('Y-m-d\TH:i:s+00:00', strtotime($ltime)); echo $ltime; ?></lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<?php
// 文章
$myposts = get_posts("numberposts=" . $posts_to_show);
foreach ($myposts as $post) { ?>
<url>
<loc><?php the_permalink(); ?></loc>
<lastmod><?php the_time('c'); ?></lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<?php } ?>
<?php
// 页面
$mypages = get_pages();
if (count($mypages) > 0) {
foreach ($mypages as $page) { ?>
<url>
<loc><?php echo get_page_link($page->ID); ?></loc>
<lastmod><?php echo str_replace(" ", "T", get_page($page->ID)->post_modified); ?>+00:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.6</priority>
</url>
<?php }} ?>
<?php
// 分类
$terms = get_terms('category', 'orderby=name&hide_empty=0');
$count = count($terms);
if ($count > 0) {
foreach ($terms as $term) { ?>
<url>
<loc><?php echo get_term_link($term, $term->slug); ?></loc>
<changefreq>weekly</changefreq>
<priority>0.4</priority>
</url>
<?php }} ?>
<?php
// 标签
$tags = get_terms("post_tag");
foreach ($tags as $key => $tag) {
$link = get_term_link(intval($tag->term_id), "post_tag");
if (is_wp_error($link)) return false;
$tags[$key]->link = $link;
?>
<url>
<loc><?php echo $link; ?></loc>
<changefreq>weekly</changefreq>
<priority>0.2</priority>
</url>
<?php } ?>
</urlset>
sitemap.php을 웹사이트 루트 디렉터리에 업로드한 다음 접속하여 결과를 확인합니다.
의사 정적 방식
Nginx
기존 Nginx 의사 정적 규칙을 편집하고 다음 규칙을 추가한 후 Nginx를 재시작하면 됩니다.
rewrite ^/sitemap.xml$ /sitemap.php last;
Apache
웹사이트 루트 디렉터리의 .htaccess 파일을 편집하고 다음 규칙을 추가합니다.
RewriteRule ^(sitemap)\.xml$ $1.php
순수 정적 방식
Linux 예약 작업 + wget으로 sitemap.xml 정기 생성(이 방식은 VPS 사용자에게 적합하며, 가상 호스팅에는 적용되지 않음)
웹사이트 루트 디렉터리의 sitemap.php 이름을 자신만 알고 있는 PHP 파일명으로 변경합니다. 예를 들어 xml.php로 변경할 수 있습니다.
그런 다음 Linux 예약 작업으로 다음 명령을 실행하여 데이터를 sitemap.xml로 저장하고 웹사이트 루트 디렉터리에 보관하면 됩니다.
wget -O /home/www/www.ikxin.com/sitemap.xml https://www.ikxin.com/sitemap.php
https://www.ikxin.com/sitemap.php는 PHP 경로입니다./home/www/www.ikxin.com/sitemap.xml은 XML 파일 저장 경로입니다.
이렇게 하면 sitemap.xml이 동적 데이터라는 문제를 해결할 수 있습니다.
