🐘

WordPressでSANGO+Featured Image from URLを使っている場合の「解析不能な構造化データ」の修正方法

2020/02/18に公開

こんにちは、たつきちです。

エンジニア歴12年ぐらいで今はベンチャー企業のCTOをしています。

最近は #ブログ毎日更新 を頑張っています💪

この記事では、WordPressで SANGOテーマFeatured Image from URLプラグイン を併用している場合に構造化データが壊れてしまって、サーチコンソールにて 「解析不能な構造化データ(値の型が正しくありません)」 というエラーが出てしまう問題について、解決方法を説明します。

あまりにもニッチなテーマですが(笑)、偶然にも同じ境遇の人がいたらお役に立てるかと思い、記録に残しておく次第です。

ぜひ最後までお付き合いください。

構造化データ

SANGOテーマを使っている場合、 Google向けの構造化データ を自動で出力してくれます。

構造化データとは、ものすごくざっくりというと検索エンジン等に対して記事の情報をより詳細に伝えるものです。現状直接的なSEO効果のあるものではありませんが、検索結果に構造化データで指定した情報が表示されることもあるため、設定しておくにこしたことはありません。
SANGOの場合、パブリッシャー情報の登録以外の設定は特に必要はありません(自動で設定されます)。

https://saruwakakun.com/sango/ver18-customizer#1-5

構造化データの中には、アイキャッチ画像の幅と高さ(ピクセル数)についての情報も含まれています。

Featured Image from URLプラグイン

Featured Image from URLプラグイン は、投稿やページのアイキャッチ画像に、外部サイトのURLを設定できるようにするプラグインです。

僕の場合は、WordPressのメディアアップロード機能はまったく使わず、記事中の画像ファイルもアイキャッチ画像もすべて外部のアップローダーにアップロードしたものを使っています。

SANGO x Featured Image from URLの組み合わせで構造化データが壊れる

SANGOテーマとFeatured Image from URLプラグインを組み合わせて使うと、構造化データのうちアイキャッチ画像の幅と高さのピクセル数の部分に正しく値が出力されず、Googleサーチコンソールで 「解析不能な構造化データ(値の型が正しくありません)」 というエラーが出てしまいます。

解決方法

これを解決するには、SANGOテーマ内にある「構造化データを出力する関数」の実装を微修正する必要があります。

SANGOは有料テーマでソースコードを公開することができないので、ポイントだけをお伝えしますね。

sango-theme/library/functions/entry-functions.php というファイルを見ると、以下のような関数が定義されています。

/*********************
 * 構造化データ挿入
 *********************/
if (!function_exists('insert_json_ld')) {
  function insert_json_ld()
  {
    // 略

    echo {構造化データのマークアップ};
  }
}

この関数を子テーマの functions.php で上書きしてあげれば、処理の内容を自由に変更できます。

具体的には、

  1. sango-theme-child/functions.php に上記の関数定義を丸ごとコピペ( if (!function_exists('insert_json_ld')) { の内側のみ)
  2. $width $height の値をセットしている処理を改変

すればOKです。

実際のコードを載せられないのでなかなか上手く伝えるのが難しいですが、修正箇所だけ具体的にお見せすると、以下のような感じです。

// sango-theme-child/functions.php

function insert_json_ld() {
    // 元の関数とまったく同じ処理

    // この部分だけ、元の処理をコメントアウトして修正
    $src = $src_info[0];
    // $width = $src_info[1];
    // $height = $src_info[2];
    $size = getimagesize($src);
    $width = $size[0];
    $height = $size[1];

    // 元の関数とまったく同じ処理
}

これで、Featured Image from URLプラグインを使っていても、アイキャッチ画像のサイズ情報を正しく取得して構造化データに出力することができるようになります👍

ただし注意点として、PHPの getimagesize 関数を使っているので、サーバーにインストールされているPHPがGDに対応している必要があります。

レンタルサーバーなどを使っていてよく分からないという場合は、サーバー業者さんに「このサーバーのPHPにはGDがインストールされていますか?」と問い合わせれば教えてもらえると思います。

まとめ

  • SANGOテーマとFeatured Image from URLプラグインを併用すると構造化データが壊れる
  • サーチコンソールのエラー内容は 「解析不能な構造化データ(値の型が正しくありません)」
  • SANGOテーマの関数を子テーマから上書きしてあげれば修正可能
GitHubで編集を提案

Discussion