Amazonで商品を見る セール会場へ

WordPress│構造化データ(JSON-LD)を書き換える・追記する方法

WordPressの構造化データ(JSON-LD)に項目を追加するときは、まず出力元の設定画面を確認し、設定できない場合に専用フィルターを使います。この記事では、Yoast SEOとRank Mathが出力するWebSiteのalternateName(サイトの別名)を変更する例を紹介します。

別名には実際に使っている略称やブランド名を指定します。検索キーワードを並べる欄ではありません。この変更だけで検索順位や検索結果の表示が変わるとは限りません。

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

最初にJSON-LDの出力元と重複を調べる

公開ページのソースで application/ld+json を検索し、WebSite、@id、name、alternateName を確認します。@graph の中に複数の種類が並ぶ形式もあります。スクリプトのクラス名や有効なプラグインを手掛かりに、どの機能が生成しているかを特定してください。

Schema.orgの検証ツールにURLまたはコードを入力すると、構造化データの種類と項目を確認できます。

同じサイトを表すWebSiteが複数ある場合は、まず生成元を整理します。別のJSON-LDを追加して既存の出力を上書きできるとは限りません。SWELL自身の出力を調べる場合は、SWELLの構造化データ一覧を参照してください。以下のSEOプラグイン用コードではSWELL本体の出力は変わりません。

コードを貼る場所と適用範囲

使用しているプラグインに対応するどちらか一方を選びます。子テーマの functions.php のPHP内、またはCode SnippetsのPHPスニペットに追加してください。記事のカスタムHTMLブロック、追加CSS、親テーマには貼りません。既存のPHP開始タグの内側に追加する場合、開始タグを重ねないでください。

変更前のファイルを保存し、まず検証環境で試します。「実際に使っているサイトの別名」を自分のサイトの別名に置き換えてください。文字列内に半角のシングルクォートを使う場合はPHPの文字列としてエスケープが必要です。

Yoast SEO:WebSite専用フィルターで変更する

別名だけなら、まずYoast SEOの設定を使います。設定場所は公式のサイト名・別名の設定手順で確認できます。コードで値を管理したい場合は、WebSite専用のwpseo_schema_websiteフィルターを使います。

add_filter('wpseo_schema_website', function ($data) {
    if (!is_array($data)) {
        return $data;
    }
    $data['alternateName'] = '実際に使っているサイトの別名';
    return $data;
});

この例は、フィルターが呼び出されるページで既存のalternateNameを置き換えます。name、@id、urlなどの項目は維持します。Yoast SEOの出力が無効なページにWebSiteを新設するコードではありません。

Rank Math:WebSiteノードを探して変更する

Rank MathのJSON-LDフィルターでは、渡された各ノードの@typeを確認します。配列のキー名をWebSiteと決め打ちせず、種類がWebSiteのノードだけを変更します。

add_filter('rank_math/json_ld', function ($data, $jsonld) {
    if (!is_array($data)) {
        return $data;
    }
    foreach ($data as $key => $node) {
        if (!is_array($node)) {
            continue;
        }
        $types = (array) ($node['@type'] ?? []);
        if (in_array('WebSite', $types, true)) {
            $data[$key]['alternateName'] = '実際に使っているサイトの別名';
        }
    }
    return $data;
}, 99, 2);

既存の別名は置き換え、OrganizationやWebPageなどのノードは維持します。WebSiteがなければ追加せず、そのまま返します。この例の対象はフィルターに渡される直下の各ノードです。独自プラグインがさらに入れ子にした構造まで再帰的に変更するコードではありません。

HTML全体の正規表現置換を避ける理由

JSON-LDはキーの順番、@graphの有無、文字列中の引用符などが変わります。HTML全体からWebSiteとnameを正規表現で探して文字列を差し込むと、別の文字列に一致したり、alternateNameが重複したりする可能性があります。

headとfooterのどちらに出るかより、生成元が用意するフィルターを確認することが先です。JavaScriptで一度だけDOMを書き換える方法も、その後に生成されるデータには届かず、元のHTMLソースには反映されません。出力元を特定できない状態で、全テーマ共通の置換コードを追加することは避けてください。

反映の確認と元に戻す方法

保存後はWordPress・サーバー・CDNの該当キャッシュを消し、ログアウト状態でトップページと投稿ページのソースを再取得します。WebSiteのalternateNameが指定値になったこと、nameや@idが残っていること、WebSiteや同じキーが意図せず増えていないことを確認してください。

続いてSchema.orgの検証ツールで構文と項目を確認します。リッチリザルトの対象機能を調べる場合は、その機能に対応したテストも必要です。検証ツールで読めることと、Googleが検索結果へ採用することは別の確認です。

反映されない場合は、使用プラグインと選んだコードの一致、構造化データ出力の有効・無効、別のスニペットによる後からの上書き、キャッシュを確認します。復旧時は追加したスニペットを無効化するか、そのコードだけを削除し、同じキャッシュを消して元のソースと比較してください。

検証範囲:掲載したコールバックの配列処理をWordPressのフィルターで確認しています。Yoast SEO・Rank Mathを導入したサイトでの全ページの出力や設定画面操作を実地確認したものではありません。

関連:SWELLの構造化データ/WordPressの使い方まとめ

  • URLをコピーしました!

内部SEOを本格的に見直すなら

WordPressのSEO対策

内部構造の調査は¥30,000〜、継続的なSEO対策は月額 ¥50,000〜(税込・最低6ヶ月)。専任のコンサルタントが定期ミーティングで施策を進めます。

WAZAの有料記事のサブスクリプションも開始しました。

サービス

Service

WordPressサイトのSEO対策のサービスに関心がありましたら、ぜひ詳細をご覧ください。

目次