記事公開前のSEOチェックリスト|検索順位を落とさない鉄板ルール

投稿ページだけに適用し、固定ページ・お知らせ・関連記事・カテゴリー一覧・アーカイブには影響しないようにする設定を含めて、公開前に必ず確認したいチェック項目と実装方法をまとめました。

1 function.phpにコードを追加(投稿ページのみに反映するPHPコードを設置)

まず、投稿(post)だけに機能を絞るために、以下のようにテーマの functions.php にコードを追加します。


//-------------------------------------------
// 記事公開前に行うべきSEOチェック&内部リンクチェック
//-------------------------------------------
function my_seo_internal_link_check() {
    global $post;
    // 投稿編集画面・かつ投稿タイプがpostのときのみ実行
    if ( ! is_admin() || ! $post || $post->post_type !== 'post' ) return;

    // メタディスクリプション取得
    $meta_desc = get_post_meta($post->ID, '_meta_description', true);
    if (empty($meta_desc)) {
        $meta_desc = get_post_meta($post->ID, '_yoast_wpseo_metadesc', true);
    }

    echo '<div style="margin:15px 0;padding:10px;border:2px solid #0073aa;border-radius:6px;background:#f0f8ff;">';
    echo '<strong>【SEOチェック結果】</strong><br>';

    if (empty($meta_desc)) {
        echo '<p style="color:#d63638;">&#x26a0; メタディスクリプションが未入力です。</p>';
    } else {
        echo '<p style="color:#008000;">&#x2705; メタディスクリプションが設定されています。</p>';
    }

    // 本文を直接取得(フィルターは通さない)
    $content = get_post_field('post_content', $post->ID);

    // 内部リンク数を単純にカウント(安全なpreg_match)
    $host = preg_quote(parse_url(home_url(), PHP_URL_HOST), '/');
    $pattern = '/<a\s+[^>]*href\s*=\s*(["\'])(https?:\/\/(www\.)?'.$host.'|\/)[^"\']*\1[^>]*>/i';
    preg_match_all($pattern, $content, $matches);
    $link_count = isset($matches[0]) ? count($matches[0]) : 0;

    if ($link_count < 2) {
        echo '<p style="color:#d63638;">&#x26a0; 内部リンクが少ないようです(現在: '.$link_count.'件)。</p>';
    } else {
        echo '<p style="color:#008000;">&#x2705; 内部リンクが十分にあります('.$link_count.'件)。</p>';
    }

    echo '</div>';

} 
add_action('edit_form_after_title', 'my_seo_internal_link_check');

このコードにより、「投稿ページとして編集画面を開いたとき」にのみチェックが走ります。お知らせ(カスタム投稿など)、固定ページ、アーカイブ一覧などには一切影響しません。

2 チェック項目:SEOメタ設定

  • タイトルタグ(SEOプラグインで適切な長さか)
  • メタディスクリプションが設定されているか
  • キーワードが記事内容と合っているか(ユーザー目線)
  • 見出し構造(h1→h2→h3)が論理的になっているか
  • 画像に alt 属性が付与されているか

例えば、チェックを自動化するなら、上記 my_seo_internal_link_check() 内で「メタディスクリプションが空なら警告を出す」などの処理を追加できます。

3 チェック項目:内部リンクの確認

内部リンクは SEO において非常に重要です。 Yoast も「内部リンクチェック機能」を備えています。

  • 記事本文から「関連する別記事」へリンクが貼られているか
  • アンカーテキストが「こちら」「詳細はこちら」ではなく、関連キーワードになっているか
  • リンク先が生きており、404になっていないか
  • 過剰なリンク貼り付けになっていないか(ユーザー導線を意識)

手動チェックでも良いですが、プラグインを使えば効率的です。
例: Internal Link Juicer など。

4 function.phpにコードを追加(管理画面で表示する簡易警告例)

投稿編集画面で「メタディスクリプションが未入力」「内部リンク数が少ない」などを警告表示するためのコード例です。


//-------------------------------------------
// 投稿編集画面で警告表示
//-------------------------------------------
function my_seo_internal_link_check() {
    global $post;
    if ( ! $post || $post->post_type !== 'post' ) return;

    // メタディスクリプション(Yoastまたは自作欄)
    $meta_desc = get_post_meta($post->ID, '_meta_description', true);
    if (empty($meta_desc)) {
        $meta_desc = get_post_meta($post->ID, '_yoast_wpseo_metadesc', true);
    }

    echo '<div style="margin:15px 0;padding:10px;border:2px solid #0073aa;border-radius:6px;background:#f0f8ff;">';
    echo '<strong>【SEOチェック結果】</strong><br>';

    // メタディスクリプションチェック
    if (empty($meta_desc)) {
        echo '<p style="color:#d63638;">&#x26A0; メタディスクリプションが未入力です。</p>';
    } else {
        echo '<p style="color:#008000;">&#x2705; メタディスクリプションが設定されています。</p>';
    }

    // -------------------------------------------
    // 本文取得(DBから直接取得してフィルター適用)
    // -------------------------------------------
    $content_raw = get_post_field('post_content', $post->ID);
    $content     = apply_filters('the_content', $content_raw); // 実際のHTMLを再構築
    $content     = wp_unslash($content); // バックスラッシュ除去

    // -------------------------------------------
    // 内部リンク検出(wwwあり/なし/相対パス対応)
    // -------------------------------------------
    $host = preg_quote($_SERVER['HTTP_HOST'], '/');
    $pattern = '/<a\s+[^>]*href\s*=\s*(["\'])(https?:\/\/(www\.)?'.$host.'|\/)[^"\']*\1[^>]*>/i';

    preg_match_all($pattern, $content, $matches);
    $link_count = isset($matches[0]) ? count($matches[0]) : 0;

    // 結果表示
    if ($link_count < 2) {
        echo '<p style="color:#d63638;">&#x26A0; 内部リンクが少ないようです(現在: '.$link_count.'件)。</p>';
    } else {
        echo '<p style="color:#008000;">&#x2705; 内部リンクが十分にあります('.$link_count.'件)。</p>';
    }

    echo '</div>';
}
add_action('edit_form_after_title', 'my_seo_internal_link_check');

5 公開前チェックリスト

  1. SEOタイトル:50〜70文字以内か
  2. メタディスクリプション:120〜160文字程度か
  3. キーワードを記事内で自然に使えているか
  4. 見出し構造が論理的か
  5. 内部リンク:最低2件以上貼られているか
  6. リンク切れチェック:すべての内部リンクが生きているか
  7. Alt属性付き画像:すべての画像に alt があるか
  8. モバイル表示確認:スマホ表示で壊れていないか

6 完成イメージ

記事公開前に行うべきSEOチェック&内部リンクチェックの方法

7 注意点と運用のコツ

  • 警告だけで満足せず、“なぜ”という背景を理解すると継続的に改善できます。
  • プラグインに頼るだけでなく、編集者が「ユーザーが次に読みたい記事に導く」という視点でリンク貼りを行うことが重要です。
  • 公開後も「内部リンクが少ない記事」「流入が少ない記事」は定期的に見直すことが大切です。

8 記事ごとにメタディスクリプションの入力欄を表示させる方法

次の記事で記事ごとにメタディスクリプションの入力欄を表示させる方法をご紹介しています。

投稿・固定ページに自動でメタディスクリプションとOGPタグを追加