SWELLのJSON-LD出力を加工するカスタマイズ
SWELLのフォーラムに次のような質問が投稿されていました。
現在、サイト内では日時を非表示にしているのですが、Googleの検索結果には日時が表示されている状態になっています。
過去にザトールやSANGO、ストークなどしようしてきましたが、その際にはサイト内で設定やGoogleで検索し対応できたのですが、SWELLはどう調べても出てきません。
固定ページや投稿記事など日時をGoogle検索でも非表示にする方法がありましたら教えていただきたいです。
https://users.swell-theme.com/forum/postid/9627/
回答は、次のようなものでした。
おそらく、構造化データから読み取っていると思うのでフィルターフックで削除すれば良いと思います。
(ページ上に表示される日付データは非表示すれば HTML 自体が出力されません)apply_filters( ‘swell_json_ld__article’, $data, $the_id ); で構造化データが加工できるので公開日と更新日を削除してみてください。構造化データ上、おそらく必須ではないので削除できるとは思いますが、SEO 上の影響はテストして確認が必要です。
https://users.swell-theme.com/forum/postid/9627/
https://search.google.com/test/rich-results
フックが用意されているのですから、フックを使用するスニペットを提供するのは問題ないと思うのですが、技術的な回答はここまでで、具体的な解決策の回答はありませんでした。
構造化データ出力をカスタマイズする
SWELLのコードを見てみましょう。
投稿や固定ページのjson-ldはget_article_data()
という関数で出力されており、最終出力にfilter hookが仕掛けられています。
public static function get_article_data() {
$post_data = get_queried_object();
if ( empty( $post_data ) ) return [];
$the_id = $post_data->ID;
$headline = wp_strip_all_tags( get_the_title( $the_id ) );
$url = self::get_the_page_url(); //get_permalink( $the_id );
$thumb = self::get_the_page_thumb();
$data = [
// '@id' => $url . '#article' ),
'@type' => 'Article',
'mainEntityOfPage' => [
'@type' => 'WebPage',
'@id' => $url,
],
'headline' => $headline,
'image' => [
'@type' => 'ImageObject',
'url' => $thumb,
],
'datePublished' => get_the_date( DATE_ISO8601 ),
'dateModified' => get_the_modified_date( DATE_ISO8601 ),
'author' => self::get_author_data( $post_data->post_author, $url ),
'publisher' => [
'@id' => home_url( '/#organization' ),
],
// → #website 側に記載
// 'description' => self::get_the_page_description(),
// 'isPartOf' => [
// '@id' => home_url( '/#website' ),
// ],
];
return apply_filters( 'swell_json_ld__article', $data, $the_id );
}
$dataからdatePublishedやdateModifiedの配列を削除すればいいよね?というのがフォーラムでの回答でした。
必須項目ではないので、削除しても問題ないというのも以下の記事が裏付けになっていると思います。
もし、フックを使ってカスタマイズするのであれば、以下のような感じになるかと思います。
<?php
add_filter('swell_json_ld__article',function($data, $the_id){
unset($data['datePublished']);
unset($data['dateModified']);
return $data;
},
10,
2);
まとめ
固定ページなどで、投稿日時や更新日時が意味をなさない場合、そもそもサイトで表示しないケースは多いと思います。
実際にSWELLにも投稿日時や更新日を表示しないオプションはあります。
もし、カスタマイザーで投稿日時や更新日を表示しない設定になっている場合は、構造化データからも消す方が一般的なのかもしれません。
コメント