これまでいくつかのブログにてブログを運営してきました。
- FC2ブログ
- 忍者ブログ
- Blogger
など…。
今現在のメインはBloggerですが、
 Bloggerには初めサイトマップ自体を作成する機能がなかったのでatomフィードと500記事ごと送信設定をする必要がありました。
現在はBloggerブログでも、
自動でxml形式のサイトマップが作成できるようになっています。
WordPressでもサイトマップを作成して、
 旧ウェブマスターツール(現SearchConsole)に送信した方が、
 SEO的には間違いなくいいです。
 
しかし、
私は、変に多くのプラグインなどは入れたくない派なので、
 なんとかならないかと行脚していました。
そしたら、
 やっぱりありました。
function.php内に記載するのですが、
以下コードを記載すれば自分のWordPressブログ・サイトのxml形式のサイトマップが作成されます。
add_action("publish_post", "eg_create_sitemap");
add_action( "save_post", "eg_create_sitemap" );
function eg_create_sitemap() {
$postsForSitemap = get_posts( array(
'numberposts' => -1,
'orderby' => 'modified',
'post_type' => array( 'post' ),
'order' => 'DESC'
) );
$sitemap = '<?xml version="1.0" encoding="UTF-8"?>';
$sitemap .= "n" . '<urlset xmlns="https://www.sitemaps.org/schemas/sitemap/0.9">' . "n";
$sitemap .= "t" . '<url>' . "n" .
"tt" . '<loc>' . esc_url( home_url( '/' ) ) . '</loc>' .
"ntt" . '<lastmod>' . date( "Y-m-d", current_time( 'timestamp', 0 ) ) . $tempo . '</lastmod>' .
"ntt" . '<changefreq>daily</changefreq>' .
"nt" . '</url>' . "n";
foreach( $postsForSitemap as $post ) {
setup_postdata( $post );
$postdate = explode( " ", $post->post_modified );
$sitemap .= "t" . '<url>' . "n" .
"tt" . '<loc>' . get_permalink( $post->ID ) . '</loc>' .
"ntt" . '<lastmod>' . $postdate[0] . '</lastmod>' .
"ntt" . '<changefreq>daily</changefreq>' .
"nt" . '</url>' . "n";
}
$sitemap .= '</urlset>';
$fp = fopen( ABSPATH . "sitemap.xml", 'w' );
fwrite( $fp, $sitemap );
fclose( $fp );
}
//robots.txtにサイトマップ指定
 add_filter("robots_txt", "add_robots_txt");
 function add_robots_txt($output) {
 $url = site_url();
 $output .= "Sitemap: $url/sitemap.xml";
 return $output;
 }
これで、
プラグインは何も使わずにGoogleさんにサイトマップの送信ができるようになります。
アドレスは、
 自分のサイトURLの後に/sitemap.xmlです。
一度、
SearchConsoleにてサイトマップの送信テストしてみるとわかると思います。
見事に成功と出るはずです。
そしたら、
 そのまま追加してしまいましょう。
今回は、
サイトマップをプラグインを使わずに作成する方法でした。
 
  
  
  
  
  
  
  
  
  
 









 
  
  
最近まで「All in One SEO Pack」を使っていたのですが、xmlサイトマップが「パースエラー」とか表示されて使い物にならなくなったので、ここに書かれた方法を試して
http://自分のドメイン/sitemap.xml
と直にURL入力しても
「http://自分のドメイン/sitemap.xml/」と言うHTMLファイルに飛ばされて、xmlサイトマップとして機能しません。
(ちなみに他のサイトマップ系プラグインを使っても同じような現象が起こって使い物になりません。)
ちなみにテーマは「Simplicity2バージョン: 2.5.1」を使っています。
他テーマに変える、プラグインの再インストール、怪しいプラグインの停止、どれも失敗しています。
何か原因に心当たりはありませんでしょうか?
raiki様コメントありがとうございます。
サイトマップをSearchConsoleで送信する際に入力するURLは自分のサイトのURLの後に「sitemap.xml」のみを入力して送信されていますでしょうか?
一度、SearchConsoleでサイトマップのテスト送信をしてみてどうかの確認をされてみてはいかがでしょう?
また、
もしくはYoast SEOというプラグインでもxmlサイトマップは作成可能なので、上記でNGであればこちらにてもお試してみてどうかですが…。
あとは、
基本中のサイトマップ専用のプラグインで「Google XML Sitemaps」で、サイトマップを作成してもらいSearchConsoleにてテスト送信を実施後に送信してみてどうかですが…。
まずは、順番にお試ししてみてくださいm(__)m。
追伸)
最後にこちらで紹介している子テーマのfunction.php内に記述するコードを、
一応もう一度以下に記載しておきます。
//Google XML サイトマップ作成' . "\n";' . "\n" .' . esc_url( home_url( '/' ) ) . ' ' .' . date( "Y-m-d", current_time( 'timestamp', 0 ) ) . $tempo . ' ' .daily ' . ' . "\n";' . "\n" .' . get_permalink( $post->ID ) . ' ' .' . $postdate[0] . ' ' .daily ' . ' . "\n"; ';
add_action("publish_post", "eg_create_sitemap");
add_action( "save_post", "eg_create_sitemap" );
function eg_create_sitemap() {
$postsForSitemap = get_posts( array(
'numberposts' => -1,
'orderby' => 'modified',
'post_type' => array( 'post' ),
'order' => 'DESC'
) );
$sitemap = '';
$sitemap .= "\n" . '
$sitemap .= "\t" . '
"\t\t" . '
"\n\t\t" . '
"\n\t\t" . '
"\n\t" . '
foreach( $postsForSitemap as $post ) {
setup_postdata( $post );
$postdate = explode( " ", $post->post_modified );
$sitemap .= "\t" . '
"\t\t" . '
"\n\t\t" . '
"\n\t\t" . '
"\n\t" . '
}
$sitemap .= '
$fp = fopen( ABSPATH . "sitemap.xml", 'w' );
fwrite( $fp, $sitemap );
fclose( $fp );
}
//robots.txtにサイトマップ指定
add_filter("robots_txt", "add_robots_txt");
function add_robots_txt($output) {
$url = site_url();
$output .= "Sitemap: $url/sitemap.xml";
return $output;
}
解決されれば良いのですが…。
念のために、上記のソースでも試しましたが、やはり「http://自分のドメイン/sitemap.xml/」と言うHTMLファイルに飛ばされて、xmlサイトマップとして機能しません。
すでに「Yoast SEO」でも、バグで悪名高い「Google XML Sitemaps」でも生成を試みましたが、同じ現象が引き起こって全然解決しません。
サーチコンソールでも
型:
エラー
問題:
サイトマップが HTML です
説明:
サイトマップが HTML ページです。サポートされている形式のサイトマップを使用してください。
と言うエラー結果が弾き出されます。
他に怪しい箇所などは見当たらないでしょうか?
raiki様。
お力になれなくて申し訳ありません。
raiki様のサイトURLがわかりませんので何とも言えませんが、
W3 Total Cacheなどのキャッシュ系プラグインなどは使用されていませんか?
キャッシュ系プラグインを使用されている場合において、
時折「サイトマップがHTMLです」といったようなエラーがでるようです。
パースエラー自体が構文エラーの意味ですので、
エラー表記がどのようにされているのか詳細がわかりませんが、
「"」や「;」が抜けていたりする場合などに通常は表示されるはずです。
また、ブラウザでFirefoxを使用されている場合などにも表示されることがあるようです。
(詳細はわかりませんがm(__)m)
他にご提案策としましては、以下のサイトで確認してみるなどしても良いのかもしれません。
http://validator.w3.org/
http://validator.w3.org/feed/
また、テーマにSimplicity2をご使用でありましたらサポートフォーラムがあると思います。
もし、時間をおいても解決されないようでしたらSimplicity2のサポートフォーラムにご質問されてみても良いのではないでしょうか。
Simplicity2作者のわいひら様が、かなり頻繁にサポートされていらっしゃるようです。
新着コメント