2026年5月20日
2026年5月20日
WordPressのSEO基本設定ガイド(検索エンジン最適化の全手順)
はじめに
WordPressのSEO対策は正しい初期設定が土台です。パーマリンク構造・タイトルタグ・メタディスクリプション・XMLサイトマップ・noindex設定を適切に行うことで、検索エンジンにサイトを正しく認識させられます。
症状・原因
- Googleにページがインデックスされない
- 検索結果にタイトルやディスクリプションが正しく表示されない
- 重複コンテンツが発生している
- XMLサイトマップが送信されていない
解決手順
ステップ1:パーマリンクをSEOフレンドリーに設定する
WordPress管理画面 → 設定 → パーマリンク
推奨設定: 「投稿名」
例: https://example.com/sample-post/
避けるべき設定:
- 「基本」(/?p=123) → URLに意味がない
- 「数字ベース」(/archives/123) → 意味がない
- 「日付と投稿名」(/2024/01/01/sample/) → URLが長い
// functions.php: パーマリンク変更後はフラッシュが必要
// 通常は管理画面から変更後に「保存」で自動フラッシュされる
// 手動でフラッシュする場合:
flush_rewrite_rules();
// 正しいパーマリンクかを確認
// add_action('init', function() { flush_rewrite_rules(); });
// ※ 毎回実行するとパフォーマンスが悪化するため一度だけ実行
ステップ2:タイトルタグを最適化する
// functions.php
// wp_title フィルター(テーマが add_theme_support('title-tag') に対応していない場合)
// ※ WordPress 4.1以降は add_theme_support('title-tag') を推奨
// theme support を追加(functions.php)
function mytheme_setup(): void {
add_theme_support('title-tag');
}
add_action('after_setup_theme', 'mytheme_setup');
// title タグをカスタマイズ
function mytheme_custom_title(string $title): string {
// トップページ: サイト名のみ
if (is_front_page()) {
return get_bloginfo('name') . ' | ' . get_bloginfo('description');
}
// 記事・固定ページ: 記事タイトル | サイト名
return $title;
}
add_filter('pre_get_document_title', 'mytheme_custom_title');
ステップ3:メタディスクリプションを設定する
// functions.php
function mytheme_meta_description(): void {
$description = '';
if (is_singular()) {
// 抜粋があれば使用、なければ本文から自動生成
$description = get_the_excerpt();
if (empty($description)) {
$post = get_post();
$content = wp_strip_all_tags($post->post_content ?? '');
$description = mb_substr($content, 0, 120);
}
} elseif (is_category() || is_tag() || is_tax()) {
$description = term_description();
} elseif (is_front_page()) {
$description = get_bloginfo('description');
}
if (empty($description)) {
$description = get_bloginfo('description');
}
// 120字に収める
$description = mb_substr(wp_strip_all_tags($description), 0, 120);
if ($description) {
echo '<meta name="description" content="' . esc_attr($description) . '">' . "\n";
}
}
add_action('wp_head', 'mytheme_meta_description', 5);
ステップ4:noindexを適切に設定する
// functions.php
function mytheme_noindex_tags(): void {
// 検索結果ページはnoindex(重複コンテンツを防ぐ)
if (is_search()) {
echo '<meta name="robots" content="noindex, follow">' . "\n";
return;
}
// 404ページはnoindex
if (is_404()) {
echo '<meta name="robots" content="noindex, nofollow">' . "\n";
return;
}
// ページネーション2ページ目以降はnoindex(任意)
if (is_paged()) {
echo '<meta name="robots" content="noindex, follow">' . "\n";
return;
}
// 管理者でログイン中はnoindex(誤インデックス防止)
if (is_user_logged_in() && current_user_can('manage_options') && is_preview()) {
echo '<meta name="robots" content="noindex, nofollow">' . "\n";
return;
}
}
add_action('wp_head', 'mytheme_noindex_tags', 1);
ステップ5:XMLサイトマップとSearch Consoleの設定
// WordPressはバージョン5.5からXMLサイトマップを内蔵
// https://example.com/wp-sitemap.xml で自動生成される
// functions.php: サイトマップをカスタマイズ
// 特定の投稿タイプをサイトマップから除外
function mytheme_sitemap_exclude_post_types(array $post_types): array {
// 「お知らせ」カスタム投稿タイプをサイトマップから除外
unset($post_types['news']);
return $post_types;
}
add_filter('wp_sitemaps_post_types', 'mytheme_sitemap_exclude_post_types');
// 非公開タクソノミーをサイトマップから除外
function mytheme_sitemap_exclude_taxonomies(array $taxonomies): array {
unset($taxonomies['post_format']);
return $taxonomies;
}
add_filter('wp_sitemaps_taxonomies', 'mytheme_sitemap_exclude_taxonomies');
Google Search Console での設定:
1. Search Console (https://search.google.com/search-console) にアクセス
2. サイトを追加・所有権確認
3. サイトマップ → https://example.com/wp-sitemap.xml を送信
4. インデックスカバレッジでエラーを確認
注意事項
flush_rewrite_rules()をinitフックに登録したままにしておくとページのロードのたびに実行されてパフォーマンスが悪化します。設定変更後に一度だけ実行してください- WordPressのデフォルトのサイトマップ(WP5.5以降)で十分な場合が多いです。Yoast SEOなどのプラグインを使う場合は重複を避けるためデフォルトサイトマップを無効化してください
is_search()ページのnoindexは必ず設定してください。設定しないと検索エンジンが重複コンテンツと判断することがあります
まとめ
パーマリンクを「投稿名」に設定し、add_theme_support('title-tag') でタイトルタグを有効化します。wp_head フックでメタディスクリプションとnoindexを出力し、wp_sitemaps_post_types フィルターでサイトマップをカスタマイズします。設定後はGoogle Search Consoleでサイトマップを送信してインデックスを促進します。