---
title: "純粋な PHP コードで sitemap.xml サイトマップを生成する - 憂いを忘れる一枚"
description: "サイトマップを利用すると、ウェブサイト管理者は検索エンジンに対して、サイト上にクロール可能なウェブページのリンクがどれだけあるかを簡単に伝えられます。最も簡単なサイトマップの形式は sitemap.xml ファイルで、その中にウェブサイト内の URL と、各 URL に関するその他のメタデータ（最終更新日時、変更頻度、"
canonical_url: "https://www.ikxin.com/ja/article/wordpress-php-xml-sitemap"
last_updated: "2026-09-16T09:59:27.259Z"
locale: ja
meta:
  "og:description": "サイトマップを利用すると、ウェブサイト管理者は検索エンジンに対して、サイト上にクロール可能なウェブページのリンクがどれだけあるかを簡単に伝えられます。最も簡単なサイトマップの形式は sitemap.xml ファイルで、その中にウェブサイト内の URL と、各 URL に関するその他のメタデータ（最終更新日時、変更頻度、"
  "og:image": "https://www.ikxin.com/_og/d/h_630%2Ca_~57SU57KL44GqIFBIUCDjgrPjg7zjg4njgacgc2l0ZW1hcC54bWwg44K144Kk44OI44Oe44OD44OX44KS55Sf5oiQ44GZ44KLIC0g5oaC44GE44KS5b-Y44KM44KL5LiA5p6a%2Cc_Article%2Ctitle_~57SU57KL44GqIFBIUCDjgrPjg7zjg4njgacgc2l0ZW1hcC54bWwg44K144Kk44OI44Oe44OD44OX44KS55Sf5oiQ44GZ44KL%2Cdescription_~44K144Kk44OI44Oe44OD44OX44KS5Yip55So44GZ44KL44Go44CB44Km44Kn44OW44K144Kk44OI566h55CG6ICF44Gv5qSc57Si44Ko44Oz44K444Oz44Gr5a--44GX44Gm44CB44K144Kk44OI5LiK44Gr44Kv44Ot44O844Or5Y-v6IO944Gq44Km44Kn44OW44Oa44O844K444Gu44Oq44Oz44Kv44GM44Gp44KM44Gg44GR44GC44KL44GL44KS57Ch5Y2Y44Gr5Lyd44GI44KJ44KM44G-44GZ44CC5pyA44KC57Ch5Y2Y44Gq44K144Kk44OI44Oe44OD44OX44Gu5b2i5byP44GvIHNpdGVtYXAueG1sIOODleOCoeOCpOODq-OBp-OAgeOBneOBruS4reOBq-OCpuOCp-ODluOCteOCpOODiOWGheOBriBVUkwg44Go44CB5ZCEIFVSTCDjgavplqLjgZnjgovjgZ3jga7ku5bjga7jg6Hjgr~jg4fjg7zjgr~vvIjmnIDntYLmm7TmlrDml6XmmYLjgIHlpInmm7TpoLvluqbjgIE%2CsiteName_~5oaC44GE44KS5b-Y44KM44KL5LiA5p6a%2CsiteHost_www.ikxin.com%2Cp_Ii9qYS9hcnRpY2xlL3dvcmRwcmVzcy1waHAteG1sLXNpdGVtYXAi%2Cs_ygpuXyCaEEZzDsSP.png"
  "og:image:alt": "純粋な PHP コードで sitemap.xml サイトマップを生成する - 憂いを忘れる一枚"
  "og:image:height": "630"
  "og:image:type": image/png
  "og:image:width": "1200"
  "og:title": "純粋な PHP コードで sitemap.xml サイトマップを生成する"
  "twitter:image": "https://www.ikxin.com/_og/d/h_630%2Ca_~57SU57KL44GqIFBIUCDjgrPjg7zjg4njgacgc2l0ZW1hcC54bWwg44K144Kk44OI44Oe44OD44OX44KS55Sf5oiQ44GZ44KLIC0g5oaC44GE44KS5b-Y44KM44KL5LiA5p6a%2Cc_Article%2Ctitle_~57SU57KL44GqIFBIUCDjgrPjg7zjg4njgacgc2l0ZW1hcC54bWwg44K144Kk44OI44Oe44OD44OX44KS55Sf5oiQ44GZ44KL%2Cdescription_~44K144Kk44OI44Oe44OD44OX44KS5Yip55So44GZ44KL44Go44CB44Km44Kn44OW44K144Kk44OI566h55CG6ICF44Gv5qSc57Si44Ko44Oz44K444Oz44Gr5a--44GX44Gm44CB44K144Kk44OI5LiK44Gr44Kv44Ot44O844Or5Y-v6IO944Gq44Km44Kn44OW44Oa44O844K444Gu44Oq44Oz44Kv44GM44Gp44KM44Gg44GR44GC44KL44GL44KS57Ch5Y2Y44Gr5Lyd44GI44KJ44KM44G-44GZ44CC5pyA44KC57Ch5Y2Y44Gq44K144Kk44OI44Oe44OD44OX44Gu5b2i5byP44GvIHNpdGVtYXAueG1sIOODleOCoeOCpOODq-OBp-OAgeOBneOBruS4reOBq-OCpuOCp-ODluOCteOCpOODiOWGheOBriBVUkwg44Go44CB5ZCEIFVSTCDjgavplqLjgZnjgovjgZ3jga7ku5bjga7jg6Hjgr~jg4fjg7zjgr~vvIjmnIDntYLmm7TmlrDml6XmmYLjgIHlpInmm7TpoLvluqbjgIE%2CsiteName_~5oaC44GE44KS5b-Y44KM44KL5LiA5p6a%2CsiteHost_www.ikxin.com%2Cp_Ii9qYS9hcnRpY2xlL3dvcmRwcmVzcy1waHAteG1sLXNpdGVtYXAi%2Cs_ygpuXyCaEEZzDsSP.png"
  "twitter:image:alt": "純粋な PHP コードで sitemap.xml サイトマップを生成する - 憂いを忘れる一枚"
---

> Index of every page on this site: [llms.txt](https://www.ikxin.com/llms.txt)

# **純粋な PHP コードで sitemap.xml サイトマップを生成する**

2017.05.26 4,140  0

サイトマップを利用すると、ウェブサイト管理者は検索エンジンに対して、サイト上にクロール可能なウェブページのリンクがどれだけあるかを簡単に伝えられます。最も簡単なサイトマップの形式は `sitemap.xml` ファイルで、その中にウェブサイト内の URL と、各 URL に関するその他のメタデータ（最終更新日時、変更頻度、サイト内の他の URL に対する相対的な重要度など）を記載します。これにより、検索エンジンはより効率的にサイトをクロールできます。

WordPress で `sitemap.xml` サイトマップを生成するために、国内ではすでに専用のプラグインが開発されています。たとえば、柳城氏の **Baidu Sitemap Generator** は比較的有名で、海外には **Google XML Sitemaps** があります。

しかし、`sitemap.xml` ファイルを生成するだけのためにプラグインを使用するのは、少しリソースの無駄のように感じたので、コードで実装してみましょう！コードはネット上で見つけたものに少し修正を加え、タグとカテゴリーの XML の生成に対応し、さらに `sitemap.xml` の生成日時も追加しました。

## PHP コード

`sitemap.php` ファイルを新規作成し、以下のコードをそのファイルに書き込みます：

 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 を再起動すれば完了です：

 Nginx

```
rewrite ^/sitemap.xml$ /sitemap.php last;
```

### Apache

ウェブサイトのルートディレクトリにある `.htaccess` ファイルを編集し、以下のルールを追加します：

 Apache

```
RewriteRule ^(sitemap)\.xml$ $1.php
```

## 完全静的化の方法

**Linux の cron ジョブ + wget で `sitemap.xml` を定期的に生成（この方法は VPS ユーザーに適しており、共用レンタルサーバーには適していません）**

ウェブサイトのルートディレクトリにある `sitemap.php` の名前を、自分だけが知っている PHP ファイル名（たとえば `xml.php`）に変更します。

次に、Linux の cron ジョブで以下のコマンドを実行し、データを `sitemap.xml` として保存して、ウェブサイトのルートディレクトリに配置します：

 Bash

```
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` が動的データであるという問題を解決できます。

## **コメント**

(0)

まだコメントはありません

## **コメントを投稿**

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://www.ikxin.com/ja#website","@type":"WebSite","description":"「憂いを忘れる一枚」は、技術探究と日々の暮らしをテーマにした個人サイトです。Web 開発、バックエンド、DevOps の実践を記録し、ソフトウェアツールやデジタル体験、コードの外で得た見聞と思索を共有します。","inLanguage":"ja-JP","name":"憂いを忘れる一枚","url":"https://www.ikxin.com/ja","translationOfWork":{"@id":"https://www.ikxin.com/#website"}},{"@id":"https://www.ikxin.com/ja/article/wordpress-php-xml-sitemap#webpage","@type":"WebPage","description":"サイトマップを利用すると、ウェブサイト管理者は検索エンジンに対して、サイト上にクロール可能なウェブページのリンクがどれだけあるかを簡単に伝えられます。最も簡単なサイトマップの形式は sitemap.xml ファイルで、その中にウェブサイト内の URL と、各 URL に関するその他のメタデータ（最終更新日時、変更頻度、","name":"純粋な PHP コードで sitemap.xml サイトマップを生成する","url":"https://www.ikxin.com/ja/article/wordpress-php-xml-sitemap","isPartOf":{"@id":"https://www.ikxin.com/ja#website"},"potentialAction":[{"@type":"ReadAction","target":["https://www.ikxin.com/ja/article/wordpress-php-xml-sitemap"]}]}]}
```

## Sitemap

See the full [sitemap](https://www.ikxin.com/sitemap.md) for all pages.
