It技術

Yoast SEOのメタデータをREST APIを使用して変更を加える


概要
WordPressのYoast SEOで設定できるメタデータを、API経由で編集する方法を解説します。

Yoast SEOとは

WordPressで提供されている人気のプラグインです。

ブログ記事のメタディスクリプション、フォーカスキーワード、SEOタイトルなどのメタデータを簡単に設定できます。

Yoast SEOはREST APIを提供していますが、データの取得(GET)のみをサポートしており、データの更新(POSTやPUT)はできません。

公式サイトでも以下のように明記されています:

Can I use this API to update data?
The Yoast REST API is currently read-only, and doesn’t currently support POST or PUT calls to update the data.

引用元:

つまり、APIを使えば現在のSEOタイトルやメタディスクリプションを取得することは可能ですが、それらを直接編集することはできないという問題があります。

実現方法

SEOタイトルやメタディスクリプションといった値を、API経由で作成や更新をできるようにする方法を紹介します。

やり方としては主に2パターンあります:

  1. プラグインを使用する
  2. カスタムエンドポイントを作成する

プラグイン使用

個人の方が作成されたプラグインがあります。

https://github.com/ChazUK/wp-api-yoast-meta

ただし7年前にアップデートが停止しておりいつWordPressやYoast SEOのバージョンに対応しなくなるか不安なところがありますが、カスタムエンドポイント作成が難しい場合はプラグインを使用すると良いと思います。

カスタムエンドポイント作成

Yoast SEOの値をAPI経由で編集できるようにすることを目指し、カスタムエンドポイントを自作する方法を説明します。

コードを作成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
/*
Plugin Name: Yoast Updater API
Description: REST APIを使用してYoast SEOのメタデータを更新するプラグイン
Version: 1.0
Author: ここに名前を記載
*/

class YoastSEOController extends WP_REST_Controller {
    public function register_routes() {
        register_rest_route('wp/v2/', '/yoast-meta/', array(
            'methods' => 'POST',
            'callback' => [$this, 'update_yoast_meta'],
            'permission_callback' => function () {
                return current_user_can('edit_posts'); // 投稿編集権限を確認
            },
        ));
    }

    public function update_yoast_meta($request) {
        $post_id = $request->get_param('postID');
        $meta_desc = $request->get_param('metaDesc');
        $focus_keyphrase = $request->get_param('focusKeyphrase');
        $seo_title = $request->get_param('seoTitle');

        if (!$post_id || !get_post($post_id)) {
            return new WP_Error('invalid_post', 'Invalid or missing post ID', ['status' => 400]);
        }

        $updated = [];
        if ($meta_desc) {
            update_post_meta($post_id, '_yoast_wpseo_metadesc', sanitize_text_field($meta_desc));
            $updated['meta_description'] = $meta_desc;
        }
        if ($focus_keyphrase) {
            update_post_meta($post_id, '_yoast_wpseo_focuskw', sanitize_text_field($focus_keyphrase));
            $updated['focus_keyphrase'] = $focus_keyphrase;
        }
        if ($seo_title) {
            update_post_meta($post_id, '_yoast_wpseo_title', sanitize_text_field($seo_title));
            $updated['seo_title'] = $seo_title;
        }

        return rest_ensure_response([
            'success' => true,
            'updated_fields' => $updated,
        ]);
    }
}

function register_yoast_seo_controller() {
    $controller = new YoastSEOController();
    $controller->register_routes();
}

add_action('rest_api_init', 'register_yoast_seo_controller');

phpファイルを作成します。

このコードではYoast SEOの以下3つの値を変更することができます。

  • メタディスクリプション
  • フォーカスキーワード
  • SEOタイトル

カスタムエンドポイント作成方法の詳細は以下のリファレンスを参考にしてください。

https://wp-rest-api.mydocument.jp/extending-the-rest-api/modifying-responses/

プラグインを作成

次にプラグインを作成します。function.phpに直書きする方法もありますが、コードが煩雑になリますしテーマ変更した場合にコードが消えるので、プラグインとして作成するのがおすすめです。

先ほどのphpファイルをyoast-updater-api.phpという名称で保存し、圧縮してzipファイルにします。Macであれば、ファイル名を右クリックして圧縮することができます。

WordPressを開き、「プラグイン>新規プラグインを追加>プラグインのアップロード」を選択します。

先ほど作成したzipファイルをアップロードし、「今すぐインストール」をクリックします。

「インストール済みプラグイン一覧」にYoast Updater APIが作成され、有効化できたら完了です。

メタデータの変更

設定が完了しましたので、実際にメタデータを変更してみましょう。

1
POST https://example.com/wp-json/wp/v2/yoast-meta
1
2
3
4
5
6
{
  "postID": 100
  "metaDesc": "メタディスクリプション",
  "focusKeyphrase": "キーフレーズ",
  "seoTitle": "タイトル"
}
  • HTTPメソッド: POST
  • エンドポイント:wp-json/wp/v2/yoast-meta
  • ペイロード
    • postID:記事ID(必須)
    • metaDesc:メタディスクリプション
    • focusKeyphrase :フォーカスキーフレーズ
    • seoTitle :SEOタイトル

上記でAPIを叩きます。

ちなみに、記事ID(postID)の確認の仕方は、WordPressの投稿または固定ページに移動し、記事にカーソルを当てたときに画面左下に表示される数字のことです。

すると、Yoast SEOの内容が挿入されているはずです。