検索結果スニペット、抜粋 get_the_excerpt の設定

Yoast SEO を停止して、Rank Math SEO プラグインを使ってみたらGoogle の検索結果に表示される記事抜粋スニペットの文字数が短過ぎに見えてびっくりした。

 

 

どうやら、このRank Math SEO では投稿記事の抜粋欄を何もテンプレート設定しておかないと、meta description に日本語では句読点「。」までの1文章しか記述されないようだ。長い文章であれば300字でも500字でも表示されることがわかった。

 

Rank Math の設定で、

SEO Titles & Meta >> Posts
“Single Post Description” に “%excerpt%” と記入しておくと、155文字ぐらいきっちり表示される様になる。

Googleの検索結果に og:description 表示

 

Googleの検索結果では、

<meta name="description" content="*****">

の内容が表示される。

このmeta description  がない場合は、

<meta property="og:description" content="***">

の内容が表示される。

 

Yoast SEO プラグインで、投稿の「メタディスクリプション」を設定していない場合は、meta name="description" は記述されないが、meta property="og:description" は、 get_the_excerpt() で自動的に取得されてhead内に記述される。

 

Google の検索結果を見てみると、3~4行に収まる範囲で150文字~250文字ぐらい表示されている。

少し多めに書いておいたほうがいいのではないか。

 

get_the_excerpt の文字数設定、&nbsp 除去

それで、Yoast が get_the_excerpt() で自動的に記述する文字数を350文字にするには、functions.php に次を記述。

 

function custom_excerpt_length( $length ) {
     return 350;	
}	
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

get_the_excerpt で得られる文章内の、不要な文字列を除去して整形しておく。特に、&nbsp とか URL を除去したい。

 

//URLの正規表現
define('URL_REG_STR', '(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)');
define('URL_REG', '/'.URL_REG_STR.'/');
//抜粋関連 nbsp 除去
function my_excerpt($content){
	$trimMatch = array("&nbsp;" , "&nbsp" , "&nbs" , "&nb" , "&n");
	
  $content = preg_replace('/<!--more-->.+/is', '', $content); //moreタグ以降削除
  $content = strip_tags($content);//タグの除去
  $content = strip_shortcodes($content);//ショートコード削除
  $content = str_replace('&nbsp;', '', $content);//特殊文字の削除(今回はスペースのみ)
  $content = preg_replace('/\[.+?\]/i', '', $content); //ショートコードを取り除く
  $content = preg_replace(URL_REG, '', $content); //URLを取り除く
  $content = preg_replace('/  /u', '', $content); //空白を取り除く
	return str_replace($trimMatch , "" , $content);
}
add_filter('get_the_excerpt', 'my_excerpt');

 

以上で、 <meta property="og:description" content="***">

に300文字ぐらい表示される。

この内容が検索結果に表示されるとは限らないが、一応多めに記述しておく。

 

ついでに、functions.php に書いてある、抜粋 excerpt 取得関連の function を記載しておく。

//本文部分の冒頭を綺麗に抜粋する echo get_content_excerpt( get_the_content(), 150 )
function get_content_excerpt($content, $length = 150){
  //_v($content);
  $content = preg_replace('/<!--more-->.+/is', '', $content); //moreタグ以降削除
  $content = strip_tags($content);//タグの除去
  $content = strip_shortcodes($content);//ショートコード削除
  $content = str_replace('&nbsp;', '', $content);//特殊文字の削除(今回はスペースのみ)
  $content = preg_replace('/\[.+?\]/i', '', $content); //ショートコードを取り除く
  $content = preg_replace(URL_REG, '', $content); //URLを取り除く

  //$lengthが整数じゃなかった場合の処理
  if (is_int(intval($length))) {
    $length = intval($length);
  } else {
    $length = 150;
  }
  $over    = intval(mb_strlen($content)) > $length;
  $content = mb_substr($content, 0, $length);//文字列を指定した長さで切り取る
  $content = esc_html($content);
  $content = $content . ' ...';
  return $content;
}

//本文部分の冒頭を綺麗に抜粋する $excerptから  echo get_kirei_excerpt( get_the_excerpt(), 150 )
function get_kirei_excerpt($excerpt, $length = 150){
  //_v($excerpt);
  $excerpt = preg_replace('/<!--more-->.+/is', '', $excerpt); //moreタグ以降削除
  $excerpt = strip_tags($excerpt);//タグの除去
  $excerpt = strip_shortcodes($excerpt);//ショートコード削除
  $excerpt = str_replace('&nbsp;', '', $excerpt);//特殊文字の削除(今回はスペースのみ)
  $excerpt = preg_replace('/\[.+?\]/i', '', $excerpt); //ショートコードを取り除く
  $excerpt = preg_replace(URL_REG, '', $excerpt); //URLを取り除く

  //$lengthが整数じゃなかった場合の処理
  if (is_int(intval($length))) {
    $length = intval($length);
  } else {
    $length = 150;
  }
  $over    = intval(mb_strlen($excerpt)) > $length;
  $excerpt = mb_substr($excerpt, 0, $length);//文字列を指定した長さで切り取る
  $excerpt = esc_html($excerpt);
  $excerpt = $excerpt . ' ...';
  return $excerpt;
}

// wpp  ID から抜粋取得    get_the_excerpt_by_id(150, 80);   id=150
function get_the_excerpt_by_id($post_id='', $length=150){
	global $post; $post_bu = '';
	if(!$post_id){
		$post_id = get_the_ID();
	} else {
		$post_bu = $post;
		$post = get_post($post_id);
	}
	$mojionly = strip_tags($post->post_content);
	$mojionly = strip_tags(strip_shortcodes($mojionly)); //Strips tags and images
	$mojionly = str_replace('&nbsp;', '', $mojionly);//特殊文字の削除
	$mojionly = preg_replace(URL_REG, '', $mojionly); //URLを取り除く
	
	if(mb_strlen($mojionly ) > $length) $t = '...';
	$content =  mb_substr($mojionly, 0, $length);
	 $t = '...';
	$content .= $t;
	if($post_bu) $post = $post_bu;
	return $content;
}

 

 

 

  • Google の Indexing API を使うと、新しい投稿記事を瞬時にGoogleの検索エンジンに登録できる。 WordPress のプラグインとしてインデックスAPIが利用できる。使い方は英語 ...
  • WP_CRON を停止して、Linux の crontab に移行する設定をこれまでに何度も試みたがうまくいかなかった。 毎日バックアップされるはずの、UpdraftPlus プラグインのクロンが動い ...
  • Kusanagi WordPress プラットフォームでは Fcache とBcache がある。 Fcache とはNginx ヱブサーバーのキャッシュ機能であり、Kusanagi の独自機能ではな ...
  • 目次 1 HTTPD アクセスログの日本語化 2 Logwatch も日本語化 HTTPD アクセスログの日本語化 Nginx,  Apache ヱブサーバーのアクセスログを見ると、日本語URLはエン ...
  • ヱブサイトの再構築中には、スタイルシート、style.css を頻繁に調整更新する。 CSSを追加、編集する度に再読み込みを繰り返して、変更の反映を確認していた。 これで編集者は反映を確認できるのだが ...
  • WordPressで使える頁カウンターをいくつか同時に使ってカウントの仕方の違いを比べてみた。WP-PostViews    長期常用中 Post Views Counter  新規インストール Go ...
  • Pjax で非同期画面遷移するWordpress テーマ Pjax Blog に変えてみた。 Pjax Blog テーマでは、Barba.js が使用されている。Pjax Blog | Unique ...
  • WordPressの投稿記事は、誤字脱字を少し修正しただけでも更新日時が変更されてしまう。 誤字の訂正だけで3年前の記事の更新日が更新されてしまうのはおかしい。 目次 1 編集画面に更新日時の変更オプ ...

タグクラウド

WordPress カテゴリ人気記事 Views most

WordPress カテゴリ人気記事 月間

20190903

タグ関連記事

閲覧履歴

    //cookieが無い場合の処理
2019
GA-views: 0
20190903