検索結果スニペット、抜粋 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;
}

 

 

 

  • 2685年6月4日

    VPSの移転方法

    VPSメモリ:2GB月額1,530円~CPU 3CoreNVMe SSD 150GB から、 メモリ:2GB 月額690円~ CPU2Core NVMe SSD50GBに移転成功した。朝から5時間ぐらいかかって落ち着いた感じ。 移転の動機は、年間支出削減。8,544円/年 で、さらに、30%をキャッシュバックのキャンペーンだったから。同一の会社だがサービスグレードの違いのみの新規追加VPS契約した。まずs1 からs2(移転先サーバー 192.168.1.2)にSSHログインできるようにする。# s1でSSH鍵生成(まだなければ)ssh-keygen -t rsa -b 4096# Enterキーを3回押してデフォルト設定 # s2に公開鍵をコピ...
  • またまたこのサイトのSSL証明書が期限切れになった。 Kusanagi の自動更新ができていない。 それで手動であれこれしてみても、こんなエラーが出る。# kusanagi update cert Challenge failed for domain makotoiwasaki.com Challenge failed for domain www.makotoiwasaki.com Attempting to renew cert (makotoiwasaki.com) from /etc/letsencrypt/renewal/makotoiwasaki.com.conf produced an unexpected error: Some challenges hav...
  • Google の Indexing API を使うと、新しい投稿記事を瞬時にGoogleの検索エンジンに登録できる。 WordPress のプラグインとしてインデックスAPIが利用できる。使い方は英語だが、この通り: ⏱️ Get Google To Index Your Website Instantly Using the Indexing API ⚡Take a look at how you can use Google's new indexing API & to get your website's pages and content crawled instantly instead of waiting for Google to...
  • WP_CRON を停止して、Linux の crontab に移行する設定をこれまでに何度も試みたがうまくいかなかった。 毎日バックアップされるはずの、UpdraftPlus プラグインのクロンが動いていない。やっと成功した設定方法を記録しておく。wp-config.php に次の行を追加する。define('DISABLE_WP_CRON', true);/var/spool/cron  に、  httpd という名前のファイルを作成し、次の1行を追加する。 所有者を httpd.www など、httpd nginx サーバーの稼働ユーザー名と同じにする。nginx.conf に書いてある。root@s4:/v...
  • Kusanagi WordPress プラットフォームでは Fcache とBcache がある。 Fcache とはNginx ヱブサーバーのキャッシュ機能であり、Kusanagi の独自機能ではない。Nginx のアクセスログを眺めていると、  BYPASS MISS EXPIRED のみで、HITが殆どない。 トップ頁、アーカイブリストの頁ではHIT、 個別投稿頁では、BYPASS MISS EXPIRED ばかりでHITがない。Kusanagi fcache on とすると、fcache は有効になったかのように思えるが、本当にキャッシュが効いているのかどうかはログで確認しないとわからない。まず、Wordpressの編集画面にログインし...
  • HTTPD アクセスログの日本語化 Nginx,  Apache ヱブサーバーのアクセスログを見ると、日本語URLはエンコードされていて読めない。 そこで、デコードして表示させる。 ログのファイル名が ssl_access.log だとすると、tail -f ssl_access.log| perl -ne 'use URI::Escape; print uri_unescape($_);' tail -f access.log | php -R 'echo urldecode($argn)."\n";'で、日本語URlが読める状態で出力される。 Apacheのログをデコードする方法 - Life with ITプログラマ x ...
  • ヱブサイトの再構築中には、スタイルシート、style.css を頻繁に調整更新する。 CSSを追加、編集する度に再読み込みを繰り返して、変更の反映を確認していた。 これで編集者は反映を確認できるのだが、一般閲覧者はわざわざ再読み込みしたり、キャッシュを削除したりするはずはないので、変更が反映されていない崩れたデザインを見ているかもしれない。わざわざリロードしたりキャッシュを削除したりしなくても変更が確実に反映されるような設定方法を発見した。wp_enqueue_scripts で CSS、JS の読み込みを管理している場合には、次のようにfunctions.php に記述する。// 子テーマのstyle.cssを最後に読み込む add_acti...
  • 2679年8月25日

    頁カウンターの比較 WordPress

    WordPressで使える頁カウンターをいくつか同時に使ってカウントの仕方の違いを比べてみた。WP-PostViews    長期常用中 Post Views Counter  新規インストール Google Analytics Post Pageviews Pjaxblog の付属カウンター機能WP-PostViews は他のカウンターよりもカウントが多くなりがちなことに気づいた。一度のアクセスなのに2回カウントされることもあるようだ。ロボットクローラー Bots のリスト数も不十分に少ないような気がする。それで数が多くなりやすいのではないか。 それで Post Views Counter に乗り換えることにした。Post Views Cou...

WordPress カテゴリ人気記事 Views most

タグ関連記事

閲覧履歴