プラグインなしでサイトマップ「sitemap.xml」を作成する-wordpress

blog

これまで、xmlサイトマップを作成するのに「Google XML Sitemaps」プラグインを利用していました。

しかし、htmlエラーが出るようになってしまい、設定を変えたりプラグインを変えたり、いろいろやってみましたが酷くなる一方でした。

そこで、プラグインを使用しないでサイトマップxmlを作成することにしました。

こんな感じのサイトマップになります。

sitemap

*この方法は、wordpressのテーマ「simplicity2」「stinger plus2」でしか確認していませんので、ご了解願います。

*因みにこのブログでは、「Google XML Sitemaps」で今のところエラーは出ていないので、このプラグインを利用しています。

サイトマップ作成関数

functions.phpに以下のコードを追加します。
私は、子テーマを使用しているので、子テーマに追加しています。

functions.phpは失敗すると、サイト全体が真っ白になってしまう場合がありますので、バックアップを取ってから作業を進めて頂けますようお願いします。

add_action('publish_post', 'create_sitemap');
add_action('publish_page', 'create_sitemap');
function create_sitemap() {
$sitemap_posts = get_posts(array(
'numberposts' => -1,
'orderby' => 'modified',
'post_type' => array('post','page'), // Add custom post types here
'order' => 'DESC'
));
$sitemap = '<?xml version="1.0" encoding="UTF-8"?>';
$sitemap .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
foreach($sitemap_posts as $post) {
setup_postdata($post);
$postdate = explode(" ", $post->post_modified);
$sitemap .= '<url>'.
'<loc>'. get_permalink($post->ID) .'</loc>'.
'<lastmod>'. $postdate[0] .'</lastmod>'.
'<changefreq>weekly</changefreq>'.
'<priority>0.8</priority>' . 
'</url>';
}
$sitemap .= '</urlset>';
$fp = fopen(ABSPATH . "sitemap.xml", 'w');
fwrite($fp, $sitemap);
fclose($fp);
}

 

*こちらサイトのコードをほぼそのまま使用しています。TechMemo 

changefreqやpriorityに関しては、お好みで設定します。

投稿ページからどの記事でもいいので一つ更新すると、wordpressをインストールしたルート直下に「sitemap.xml」が生成されているかと思います。

パーマリンク設定によっては、プラウザから「sitemap.xml」に直接アクセスすると404になってしまう場合があります。その際は、ftpソフトなどでご確認して頂ければと思います。

ftp

除外したい記事ページがある場合

記事ID「111」「555」「999」を除外したい場合、4行目に「‘exclude’ => ‘111,555,999’,」を追記します。

$sitemap_posts = get_posts(array('exclude' => '111,555,999',

*最後の「,」も必要です。

*設定しても除外されていないときは、該当記事を投稿ページから一度更新してください。

カスタム投稿を追加したい場合

7行目にカスタム投稿を追加します。

'post_type' => array('post','page','カスタム投稿'),

固定ページは不要な場合

7行目から固定ページ「’page’」を削除します。

'post_type' => array('post'),

作成したサイトマップを、検索エンジンに知らせる。

新規記事投稿や既存記事更新した時は、自動で「sitemap.xml」も更新されますが、さらに検索エンジンに知らせたい場合は以下にアクセスします。

・google
https://www.google.com/ping?sitemap=http://test.com/sitemap.xml

・bing
https://www.bing.com/ping?sitemap=http://test.com/sitemap.xml

赤字部分は、ご自分のサイトを記入してください。

 

*サーチコンソールを利用していてエラーが出た際は、robots.txt を作成して、ルート直下に置く必要があるかもしれません。

例えば

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Sitemap: http://test.com/sitemap.xml

とか。

wordpressのインストール先がルート直下でない場合

本記事は、wordpressがルート直下にインストールされていることを前提にしています。もし違う場合は、それに合わせて修正してください。

例えば、インストール先が /wp/hoge/ であれば、「sitemap.xml」は、

http://test.com/wp/hoge/sitemap.xml

に生成されます。検索エンジンに知らせる時は、

・google
https://www.google.com/ping?sitemap=http://test.com/wp/hoge/sitemap.xml

・bing
https://www.bing.com/ping?sitemap=http://test.com/wp/hoge/sitemap.xml

とかになります。

そして、robots.txt は、

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Sitemap: http://test.com/wp/hoge/sitemap.xml

とかになります。robots.txt の置き場所も変わってくるかもしれません。

最後に

この方法は、トップページやカテゴリページ、タグページはサイトマップに含まれません。私は不要なのでこのままですが、必要であればその他の方法で作成してください。

例えば、

サイトマップを作成-自動生成ツール「sitemap.xml Editor

などで作成可能です。自動更新はされませんが…。

 

wordpressの管理画面から、function.phpなどの.phpファイルを編集した場合、うまく動作しない時があります。

その際は、ftpソフトなどでいったん該当ファイルをローカルに保存して、そこで編集を行います。

編集した.phpを、ftpソフトなどで再度アップロードする事で正常動作する場合があります。

.phpを編集する際は、サクラエディタ が、エラーが少ないのではないかと思います。

上のエディタで保存する場合は、文字コード「UTF-8」、BOM「チェック無し」がエラーが少ないのでは無いかと思います。

sakuraediter