Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: Cannot modify header information - headers already sent by (output started at /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php:340) in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/all-in-one-seo-pack/app/Common/Meta/Robots.php on line 87

Warning: Cannot modify header information - headers already sent by (output started at /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php:340) in /home/youjipdkmmwx/web-tweets.com/public_html/wp-includes/feed-rss2.php on line 8
SEO | 知ってほしいWebのあれこれ https://web-tweets.com webに関する様々な情報をお伝えします。 Mon, 12 Aug 2024 08:31:06 +0000 ja hourly 1 PageSpeedInsightsのAPIでWebCoreVital測定から記録まで自動化 https://web-tweets.com/automation/pagespeedinsights-api/ Mon, 12 Aug 2024 08:16:40 +0000 https://web-tweets.com/?p=640 Googleが提供するウェブパフォーマンスを分析する人気のツールであるPageSpeedInsightsを、APIを通じて活用することができます。PageSpeedInsightsによる手動の測定は、大量のページを一括で...

The post PageSpeedInsightsのAPIでWebCoreVital測定から記録まで自動化 first appeared on 知ってほしいWebのあれこれ.]]>
Googleが提供するウェブパフォーマンスを分析する人気のツールであるPageSpeedInsightsを、APIを通じて活用することができます。PageSpeedInsightsによる手動の測定は、大量のページを一括で測定したり、定期的なパフォーマンスモニタリングを実施するには不向きです。今回は自動でPageSpeedInsightsの結果を取得するために、PageSpeedInsightsのAPIについて紹介していきます。

概要
  • 本記事の範囲
    • PageSpeedInsightsのAPIで私がやりたかった事、使い方、JSONデータ構造を記事にします。
  • 背景
    • 手動で行うパフォーマンステストに限界があり(手動でやるのはキツい)、自動化をしたかった
    • 有料ツールで表示速度チェックが一気にできるが、予算がないので安価でツールを開発したかった
  • 解決したい問題
    • たくさんのページの表示速度チェックを自動で行い、更にスプレッドシートに転記して集計できるようにする
    • 表示速度チェックを自動で定期的に行い、モニタリングできるようにする
  • 実行環境
    • 自動化に使うツールは「Googleスプレッドシート、GoogleAppsScript」
      • 必要なのは「Googleアカウント、GoogleCloudPlatformのアカウントおよび登録、設定から取得したapiキー」

PageSpeedInsightsのAPIでやりたかった事

私は日頃、SEOコンサルタントとしてサービスを提供することがあります。訳あってSEOコンサル会社は退職しましたが、Salesforce支援を行う会社で導入の支援を行いながら、クライアントの希望があればWebマーケティング支援も行い、一気通貫したサービスを提供しています。

Webマーケティング支援も兼務するので、過去の経験を活かしたSEOコンサルサービスを提供するのですが、前職で契約していたSEOの有料ツールがありません。というより、ツールの必要性に対する社内理解がまだ低いので、有料ツールの導入に障壁がある段階です。

そこで、PageSppedInsightsのAPIを利用した有料ツールの代替となるアプリ作成することで、費用をかけずSEOコンサルに関する業務負担を軽減したいと思って開発を試みました。

PageSppedInsightsのAPIの料金

厳密に言えば、PageSppedInsightsのAPIには費用負担があるのですが、APIリクエストによる従量課金で、有料ツールの契約とは比べ物にはならないぐらい安価です。

以下が、最終的なアプリ動作です。

PageSppedInsightsの開発アプリの最終的な動作
  • スプレッドシートにPageSppedInsightsで表示速度計測を行うURLリストがある
  • スプレッドシートのURLリストの取得はGoogle Apps Scriptで行う
  • 取得したURLリストをGoogleAppsScriptでPageSppedInsightsのAPIを呼び込み、表示速度結果を取得する
  • 取得できた表示速度結果は、スプレッドシートに記載する。
pagespeedinsightsでやりたいこと

PageSpeedInsightsのAPIの使い方

PageSpeedInsightsAPIとは

PageSppedInsightsのAPIとは、Googleが提供する表示速度などのページパフォーマンスを計測する「PageSpeed Insights」の機能及び測定結果をプログラムから取得できるものです。
このAPIから、ウェブページの読み込み速度などのデータを自動的に取得することが可能です。PageSpeed InsightsはAPI経由でなくてもブラウザから結果を取得することもできますが、APIを通じて定期的な測定結果のモニタリングや対象URLに対して一気に測定することができます。

手動で行うPageSpeedInsights
手動で試してみたい場合は「PageSpeedInsights」をクリックしてみてください。1URL毎に手動で計測結果を取得できます。このツールで取得できる結果をAPIでは自動で取得することができます。

ブラウザから簡単にPageSpeedInsightsのAPIを試してみる

PageSpeedInsightsのAPIが、どんなデータを返してくるかは、ブラウザから簡単に試してみることができます。

以下に表示されているURLをコピペして、「https://www.yoursite.com/」の部分を計測したいページURLに変更してみてください。これによってPageSpeedInsightsのAPIから取得できる結果を確認することができます。

結果取得には時間がかかる

APIから取得する結果は、表示測定を行っている時間がかかるため、それなりに時間がかかります。ロード時間が長くても待ってください。10秒程度で結果は返ってくると思います。

//以下URLの「https://www.yoursite.com/」の部分を計測したい任意のページURLに変えてブラウザで表示してみてください。
https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://www.yoursite.com/

測定結果は、以下画像のようなデータ構造で表示されます。

Safariで実行したPageSpeedInsightsの結果

Safariのブラウザで実行した結果の一部

測定方法や測定カテゴリを指定するAPIの文字列クエリパラメータ

先ほどブラウザで試したURLにクエリパラメータを追加することで測定方法や測定カテゴリなどを指定することができます。主に使うクエリパラメータを紹介しておきます。

パラメータ 使用用途
category 測定結果のカテゴリです。デフォルトはperformanceです。複数指定することも可能です。

  • performance
  • accessibility
  • best-practices
  • seo
  • pwa

今回の私はCoreWebVitalの指標を取得したいので、performanceを指定しています。PageSpeedInsightsの結果ページでは、categoryのperformanceとaccessibilityで取得できる値は以下画像のキャプチャが該当します。
PageSpeedInsightsのperformanceとaccessibilityの値

strategy
  • desktop
  • mobile

PCとモバイルどちらかの環境で測定するかを選べます。デフォルトはPC。

SEO観点でモバイルファーストインデックスを加味して、私は今回「mobile」を指定しています。
locale 言語及び地域を指定する場合に使用します。日本の場合は「ja」
key 短期間に同じIPアドレスからのリクエストが多数になる場合はapiキーが必要です。今回は大量に定期的にリクエストすることを想定していますので、GoogleCloudPlatformから取得したapiキーを指定します。

上記のパラメータを加味して、私が計測に使用したパラメータは以下のようになります。

//以下URLの「https://www.yoursite.com/」の部分を計測したい任意のページURLに変え「key=」以降を取得したapiキーに変えて、APIをリクエストしています。
https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://www.yoursite.com/&category=performance&strategy=mobile&locale=ja&key=xxxxxxxxx

 

PageSpeedInsightsのAPIで返されるJSONデータ構造

PageSpeedInsightsのAPIで返されるデータはJSONデータです。JSONデータは数百行で収まるものではなく、もっと大量のデータ行で返されます。さらに、表示速度測定を行ったページのリソースが多ければ、返されるデータ行は増えていきます。(ページ内の画像など、読み込んだデータに対しての測定結果を返してくるため)

JSONデータ構造は「PageSpeedツールの公式ガイド」に説明がありますが、全データに対して説明があるわけではありません。大まかなデータ構造を理解しつつ、取得したデータは自身で細かく確認していく必要があります。

CoreWebVitalの指標は「lighthouseResult」のセクションを参照する

CoreWebVitalの指標を取得したい場合は「LighthouseResult」のセクションを確認してください。セクションの一部は以下画像のようになっています。

PageSpeedInsightのAPIで返されるLighthouseResultセクション

LighthouseResultのセクション内のパフォーマンススコアは「categories > performance >socre」にあります。

このスコアは0から1の間の数値で表示されています。PageSpeedツールでは、%表示のため見え方に違いある点に注意が必要です。つまり、以下画像のスコア0.38はPageSpeedツールでは38と表示されています。
Lighthouseのパフォーマンススコア

その他、CoreWebVitalの指標はLighthouseResultのセクション内の「audits」配下にあります。ここの指標はスコアではなく、具体的にかかった秒数を取得したいため、以下の表に基づいて指標を取得しています。

CoreWebVitalの指標 データ参照先
First Contentful Paint lighthouseResult.audits.first-contentful-paint.displayValue
First Meaningful Paint lighthouseResult.audits.first-meaningful-paint.displayValue
Largest Contentful Paint lighthouseResult.audits.largest-contentful-paint.displayValue
スピードインデックス lighthouseResult.audits.speed-index.displayValue
累積レイアウトシフト lighthouseResult.audits.cumulative-layout-shift.displayValue

上記表から「First Contentful Paint」から「displayVaule」を参照する場合は、以下の画像のようにデータを参照していることになります。

LighthouseResultのfirst-contentful-paintの秒数

PageSpeedInsightsのAPIのGoogleAppsScriptの実行関数サンプル

GoogleAppsScriptでPageSpeedInsightsのAPIを実行するサンプルの関数は以下のようになります。
私はスプレッドシートからURLを取得した上で関数を実行したいので、引数を取得する関数にしています。また、APIキーはGoogleCloudPlatformから取得したものをご指定ください。

//引数urlを送る別の関数でURLを取得して関数getPageSpeeInsightsDataに渡してください
//apiキーはGoogleCloudPlatformから取得したAPIキーを設定してください。
//returnで返された値をスプレッドシートに転記する関数などで使用してください。

function getPageSpeedInsightsData(url) {
  var apiKey = 'xxxxxxxxxxxxxxxx'; // 自分のAPIキーを設定してください
  var apiUrl = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=' + encodeURIComponent(url) + '&category=performance&strategy=mobile&locale=ja&key=' + apiKey;
  
  var response = UrlFetchApp.fetch(apiUrl);
  var data = JSON.parse(response.getContentText());

  var performance = getNestedData(data, ['lighthouseResult', 'categories', 'performance', 'score']);
  var fcp = getNestedData(data, ['lighthouseResult', 'audits', 'first-contentful-paint', 'displayValue']);
  var fmp = getNestedData(data, ['lighthouseResult', 'audits', 'first-meaningful-paint', 'displayValue']);
  var lcp = getNestedData(data, ['lighthouseResult', 'audits', 'largest-contentful-paint', 'displayValue']);
  var speedIndex = getNestedData(data, ['lighthouseResult', 'audits', 'speed-index', 'displayValue']);
  var serverResponseTime = getNestedData(data, ['lighthouseResult', 'audits', 'server-response-time', 'numericValue']);
  var totalByteWeight = getNestedData(data, ['lighthouseResult', 'audits', 'total-byte-weight', 'score']);
  var domSizeScore = getNestedData(data, ['lighthouseResult', 'audits', 'dom-size', 'score']);

  return [performance, fcp, fmp, lcp, speedIndex, serverResponseTime, totalByteWeight, domSizeScore];
}

SEO向けの応用編:スクレイピングのデータを含めてPageSpeedInsightsのAPIを実行する

PageSpeedInsightsのAPIを活用してCoreWebVitalの指標取得に加えて、対象URLをスクレイピングしたデータを1行にまとめるとSEOの分析でさらに便利です。以下はスプレッドシートで、スクレイピングによる結果とPageSpeedInsightsのAPIの結果をまとめたイメージです。

色々なシーンでAPIを活用して、SEOのコンサルティング業務が効率化できそうで満足です。

 

The post PageSpeedInsightsのAPIでWebCoreVital測定から記録まで自動化 first appeared on 知ってほしいWebのあれこれ.]]>
ECサイトのテクニカルSEOガイド https://web-tweets.com/seo/ec-seo/ Sat, 28 Mar 2020 05:28:39 +0000 https://web-tweets.com/?p=331 ECサイトの成果を出すために、SEO流入数を最大化したいと考えているウェブ担当者の方は、SEOのテクニカル(技術的)な部分の運用方法を基礎知識として知っておくべきです。 今回はECサイトを最適化するためのテクニカルSEO...

The post ECサイトのテクニカルSEOガイド first appeared on 知ってほしいWebのあれこれ.]]>
ECサイトの成果を出すために、SEO流入数を最大化したいと考えているウェブ担当者の方は、SEOのテクニカル(技術的)な部分の運用方法を基礎知識として知っておくべきです。

今回はECサイトを最適化するためのテクニカルSEOガイドを紹介していきます。

ECサイト運営に必要なテクニカルSEOガイド

前提:Googleサーチコンソールに登録する

早速、ECサイト運営に必要なテクニカルSEOを紹介していきますが、これから説明するテクニカルSEOの実装ができているかを知るためにはGoogleサーチコンソールが役に立ちます。

Googleサーチコンソールに、運営しているECサイトのドメインを登録していない場合は、すぐに登録するようにしましょう!これから説明するほとんどのポイントは、Googleサーチコンソールから活用することができます。

ポイント1:ページがクロールできていること

検索エンジンがサイトを掲載してくれるのは、検索エンジンのロボットがWebサイトをクロールすることができるからです。Webサイトをクロールしないと、ページの中身を理解することができないので、順位づけの対象外になってしまいます。そのため、ECサイトを検索結果に表示したい場合は、ページがクロールできることが最低条件です。

まず最初のステップとして、検索エンジンがページをクロールできているかを確認しましょう!

ウェブさん
テスト公開中のサイトをIPアドレス制限してると検索エンジンがクロールできないという初歩的なミスもたまに起こります。また、no index設定しているとクロールはできても検索エンジンにインデックスしないので注意が必要です!

ポイント2:4XX系の問題を解決する

在庫切れや既に販売終了したページの4XX系(ステータスコード400番台)が発生する場合は、そうしたページの問題を解決する必要があります。終了したページがsitemap.xmlに残ったままであったり、リンク切れのページが存在する場合、テクニカルSEOの観点からするとクローラビリティが低いサイトと評価されます。

あまりにクローラビリティが悪いと、新しいページのインデックスが遅かったり、みて欲しい(クロールして欲しい)ページを十分にクロールしてもらえない可能性があります。

ECサイトの販売終了ページをどうするかは、以下の動画が参考になります。(要約した内容は動画の下に記載しています。)

  • 数十ページ程度の商品ページが少ないECサイトの場合は、404ページを馬鹿正直に返すだけでなく、関連商品を提示するのも戦略の一つです。
  • 数百、数千ページのECサイトの場合、404ページの対応を真っ先にするべきです。404ページがどれも多いと、製品がないサイトだと認識されてしまう可能性があります。
  • 短期間で大量の404ページが多い場合、metaタグでインデックスの有効期限を設定して、有効期限以降は検索結果から削除する方法があります。

ポイント3:クロール除外ページを確認する

robots.txtでクロールするディレクトを除外をすることができます。ただページのクロールが除外をすると、検索エンジンはページをクロールすることができないので、インデックスすることができません。

本当にクロールさせず、インデックス不要なのかのジャッジは最新の注意を払う必要があります。なぜなら、重要なページがクロール除外されているかもしれないからです。

robots.txtでクロール除外をする場合は慎重判断が必要です。

ポイント4:構造化マークアップを実装すること

ECサイトの場合、構造化マークアップは特に重要です。主な構造化マークアップは、パンくずリストの構造化マークアップ、企業ロゴ構造化マークアップ、商品の構造化マークアップです。この中でも商品の構造化マークアップはECサイトにおいて重要なので、商品価格やレビューの構造化マークアップをするようにしましょう。

ポイント5:売れているターゲットキーワードに注力する

SEOで流入数が多いブランドや商品カテゴリーキーワードのサイト訪問は、数値の成果に見えるのに魅力的です。

ただ、本当に重要なのは流入数ではなく、売り上げに貢献するかどうかです。そのため、本当に売り上げに貢献するキーワードにSEOリソースを割くようにしましょう!

ただ本当に売り上げに成果が出るキーワードは、具体的な3語程度の掛け合わせキーワード多くなっています。そのため、ブランドキーワードより、キーワードの検索ボリュームが少ない傾向にあることは理解をしておくべきです。

ウェブさん
ECサイトにおいて、カテゴリーやブランド系キーワードの流入数は魅力的ですが、それだけではないことを知っておくべき

ポイント6:複数ページで同じ検索クエリで評価が競合しないように

販売に繋がるキーワードがわかった場合、そのクエリでもっと上位表示するためには、同じクエリで評価されるページを放置しないようにしましょう。同じキーワード検索クエリで複数のページが評価されている場合、Googleの評価が分散している可能性があります。

ターゲットクエリのページ評価は、Googleサーチコンソールで確認することができます。

ポイント7:商品の型違いや色違いなどのコンテンツ重複がないようにする

Googleはより高い品質のコンテンツを順位づけで上位に持ってきます。そのため、60%以上のページ情報が重複になっている場合、Googleは重複コンテンツと見なす場合があります。

60%以上の情報が重複する可能性があるのはECサイトの場合など、色違いやサイズ違いの場合です。つまり色違いやサイズ違いなどの場合はページの情報がほとんど同じページになるため、1つのページに集約するのをオススメします。

ウェブさん
ユーザーとしても色違いんページをいちいちページ遷移する必要がなくなるので、ユーザビリティも向上することに期待ができます!

ポイント8:情報が乏しいページを改善する

情報が少ないページは「Googleからは検索結果の表示価値がない」と判断されて、インデックスされない可能性があります。

ECサイトの場合だと、商品ページに十分な商品詳細説明や写真がなかったりする場合です。ページの提供情報が少ないと、Googleが判断すると、Googleが検索結果に表示する価値がないページと理解するためです。

ポイント9:スマホ対応は最低条件

今更いう必要はないですが、スマートフォンでECサイトを購入する人はとっくに一般的です。そのため、スマートフォン対応していないECサイトはスマートフォン対応ができていることは最低条件です。

また、Googleはモバイルファーストインデックス対応を今年度中に行う予定です。仮にスマートフォン対応していないページは、検索順位が下がることは想定されますので、注意が必要です。

ポイント10:https対応はいうまでもなく必須

スマホ対応が必須だと伝えたのと同じように、今更言う必要はないと思いますが、Webサイトの常時https対応は必須要件です。httpsとhttpでは「httpsのほうがSEOで順位が上」になります。httpsのコストはかかりますが、ウェブサイトを運営するのに必要最低限のコストと心得、https対応はするようにしましょう。

ポイント11:表示速度はSEOや販売観点から重要

 

表示速度は、ECサイトで超重要です。表示速度はアルゴリズムの要素の1つになっています。遅いサイトと早いサイトでは早いサイトが上位表示されます。また、表示速度は購買行動に影響を与えます。表示速度と売り上げに関する統計調査は様々ありますが、1秒早くなるだけでも売り上げが上がると言われています。SEOのためと考えるのではなく、ECサイトで売り上げを高めるために必要なことだと心得ましょう。

ウェブさん
現実問題として難しい場合もありますが、「ページの表示速度は2秒以内」にするといいでしょう!
The post ECサイトのテクニカルSEOガイド first appeared on 知ってほしいWebのあれこれ.]]>
SEO戦略に不可欠!構造化データのトレンドや重要性、実装メリットを解説! https://web-tweets.com/seo/importance-of-structured-data/ Wed, 11 Mar 2020 09:17:04 +0000 https://web-tweets.com/?p=325 2020年以降のSEO戦略は構造化データの実装がより重要性を増すと考えられます。まだリソースがなくて実装されていない方も実装をおススメします。 まだ実装されていない方も既に実装されている方も今回は構造化データの重要性や最...

The post SEO戦略に不可欠!構造化データのトレンドや重要性、実装メリットを解説! first appeared on 知ってほしいWebのあれこれ.]]>
2020年以降のSEO戦略は構造化データの実装がより重要性を増すと考えられます。まだリソースがなくて実装されていない方も実装をおススメします。

まだ実装されていない方も既に実装されている方も今回は構造化データの重要性や最近のトレンド、実装するメリットを解説していきます。

構造化データのマークアップは本当に必要?

構造化データを実装されていない方の中には、SEO施策の中でも後回しにしている人も多いのではないでしょうか。構造化データのマークアップを実装しなくても、何らペナルティを受けるわけではないので、SEOのためにピックアップした施策の中でも、後回しになりがちなのが構造化データの実装です。

果たして構造化データの実装は必要でしょうか?と聞かれたら間違いなく「イエス」と答えます。

なぜ、構造化データを実装することは「Googleがコンテンツを理解するのに役立ちます」。もちろん構造化データをしなくても既に検索結果に表示されているクライアントサイトはあると思いますが、それでも積極的に構造化データの実装は行うべきです。

なぜなら、検索結果で上位表示されていても、構造化データによって検索結果がリッチに表示されている方がクリックされる可能性があるからです。上位表示されていることが全てではないため、構造化データは必要だといえます。

構造化データの最近のトレンド

構造化データの必要性について述べましたが、構造化データの最近のトレンドを確認していきましょう。構造化データのトレンドを知ることで重要性が増してきていることが理解できるはずです。

トレンド①:構造化データの種類が増え続けている

構造化データ自体は数年前からリリースされているものですが、構造化データのフォロー内容自体は増え続けています。メジャーな構造化データを例にすると、「料理レシピ」、「仕事(求人情報)」、「店舗」による構造化データが多くなっています。

トレンド②:構造化データを利用するサイトが増えている

構造化データを実装するサイトは増えており、クロールされているWebサイトの3分の1が構造化デートを実装されるようになってきているようです。なぜ、構造化データを実装するサイトが増えているかは、流入数だけでなく、コンバージョン増加にも貢献するからです。

また、構造化データは音声検索クエリと一致されることにも効果が期待できます。例えばAmazonは、構造化データのschemaを利用して、ローカルビジネスの音声検索意図を判断します。

トレンド③:構造化データでCTR向上

構造化データを利用することでSERPs(検索結果)をリッチに表示することが見込めます。検索結果の表示内容をリッチにするために、ローカルビジネスリスティングやパンくず構造化データを行うことでCTRを向上させる効果を期待することができます。また、他にもインプレッションや平均掲載順位の増加も見込めます

どうして構造化データは実装されづらいのか

構造化データを実装するサイトは増えてきていますが、どうして構造化データを実装してくれないクライアントがいるのでしょうか。そこには以下のような理由が考えられます。

  • 実装のためのリソースがない
  • 技術的なマークアップ方法を理解していない
  • CMSの仕様にハードルがある
  • 実装のメリットを理解できない

これらが構造化データを実装出来ない主な要因になっていると思いますが、構造化データはこれからのSEO戦略の1つとして有益になるものなので、メリットを理解してもらうために説得しましょう。

構造化データを実装するメリット

改めて、構造化データを実装するメリットを整理しましょう!このメリットを正しく理解して、まだ実装していないがクライアントの説得が難航している場合は、説得するための材料にしましょう

構造化データを実装するメリットは以下が挙げられます。

  • CTRを高める
  • CVRの増加
  • 音声検索クエリに対応する

メリット①:CTRを高める

構造化データを実装するには、先ほどから伝えているように検索結果をリッチにする効果が期待でき、その結果がポジティブなものであればクリック率を高めることが可能となっています。

製品構造化データによって、製品レビューの構造化データが表示されたときに、そのレビュー(点数)が良いものであればよいものであるほど、クリック率向上に期待ができます。構造化データを実装していない上位表示サイトよりも、クリック率を高くすることも可能かもしれません。

メリット②:CVRの増加

構造化データによる検索結果の表示内容がユーザーにとって良いものであれば、購入する可能性が高くなります。先ほどのように、検索結果で表示される例品レビュースコアが高いものである場合は、購入(コンバージョン)の動機に昇華させることもできる可能性があります。

その他にも、構造化データによって露出されたGoogle for jobからの流入によって、サイトのコンバージョン増が見込めます。

メリット③:音声検索クエリに対応する

構造化データによる音声検索結果は、注目のスニペットから取得されます。そのため、音声クエリの結果につながることを意味します。日本では少ないとされる音声検索ですが、今後の需要増は目下進んでいると考えられます。

構造化データを実装する時の注意点

最後に構造化データを実装する時の注意点を説明したいと思います。

まず、構造化データがスパムとGoogleから判定されないようにすることが必要です。構造化データによって、Googleからスパム判定されてしまうと、Googleの構造化データの手動ペナルティとなります。もし、この手動ペナルティの対象になると、ペナルティが解除されるまで検索結果の構造化データが表示されなくなるので注意が必要です。

ウェブさん
構造化データの中では、Google for jobsに対応するための構造化は特に注意が必要です!
The post SEO戦略に不可欠!構造化データのトレンドや重要性、実装メリットを解説! first appeared on 知ってほしいWebのあれこれ.]]>
クロールバジェットでSEO最適化を図る7つの方法 https://web-tweets.com/seo/crawl-budget/ Tue, 28 Jan 2020 15:00:57 +0000 https://web-tweets.com/?p=321 あなたが運営しているサイトがGoogleなどの検索結果に出てくるのは、検索エンジンロボットがサイトをクロール(巡回)してくれるからです。クロールすることでページの内容を理解し、その理解に応じて検索結果に反映することができ...

The post クロールバジェットでSEO最適化を図る7つの方法 first appeared on 知ってほしいWebのあれこれ.]]>
あなたが運営しているサイトがGoogleなどの検索結果に出てくるのは、検索エンジンロボットがサイトをクロール(巡回)してくれるからです。クロールすることでページの内容を理解し、その理解に応じて検索結果に反映することができます。

そのため、検索エンジンロボットがあなたのサイトをクロールしてくれることはSEOで重要なことです。そして、クロールバジェット(予算)とはWebページをクロールすることができる上限のことを示します。

今回は、クロールバジェットを意識したSEO最適化を図る7つの方法を紹介してきます。

今回の記事では、クロールバジェットを最適化する方法が学べるように記事を紹介していきます。

クロールバジェットとは

クロールバジェットとは、あなたのサイトのページをクロールしてくれる上限のことをいいます。バジェットとは予算と訳されますので、クロールバジェットとはクロール予算とも言い換えられます。

SEO屋の中では「クロールバジェットの無駄遣い」であったり、「クロールバジェットに達して、ページが見られない」といった風に会話をします。

ウェブさん
クロールバジェットが空っぽになってしまうと、せっかく更新したページを見てくれていない!などのリスクが出るでしょう!

クロールバジェットの最適化はなぜ必要?

クロールバジェットは、なぜSEOで意識しなければならないでしょうか。そこには、クロールバジェットがなくなってしまうと、あなたのサイトのページを検索エンジンロボットがクロールしてくれなくなってしまうリスクがあるからです。

ググった結果の検索結果に表示するためには、Googleなどの検索エンジンロボットがあなたのページをクロールする必要があります。クロールをした内容を評価した上で、検索結果の順位を決めています。つまり、検索エンジンロボットがあなたのページをクロールしないと、検索結果の順位決めの候補にすらならない可能性があります。

クロールバジェットを最適化することで、あなたのページをクロールしてくれることが見込めるのです。

クロールバジェットを最適化する7つの方法

①:robots.txtでクロールを許可するページを管理する

robots.txtは、クローラーを制御するためのファイルです。このrobots.txtではクロールさせる必要がないページを検索エンジンロボットに伝えることができます。一方で、重要なページのクロールを管理することができます。

ここでのSEO最適化ポイントは、クロールをする必要がないページをrobots.txtで制御することで、クロールバジェットの無駄遣いを防ぐことができるという点です。

②:リダイレクトチェーン(繰り返し)をしないこと

サイト運営をしていく上で、301リダイレクトや302リダイレクトは、欠かせない処理です。

301、302リダイレクトとは

301リダイレクトとは、ページのURLが変更(永久に変更)となったときに行うリダイレクト処理のことを指します。302リダイレクトとは一時的なURLの変更となったことを示します。

ただ、リダイレクトを行うときは注意が必要です。なぜなら、リダイレクトが繰り返されると、その都度ページの読み込みが発生することになり、クロールバジェットの無駄遣いが発生して、クロールバジェットがなくなります。已を得ないリダイレクトは仕方がないですが、リダイレクトチェーン(繰り返し)はなるべく避けるのが賢明です。

③:できるだけHTMLコーディングをすること

Googleの性能が良くなったクローラーは、JavaScriptの理解が深まりました。JavaScriptの理解が深まったことで、最近はクロール処理改善がされてきました。ただ、他の検索エンジンのクローラーを考えると、GoogleほどJavaScriptの理解が深まっていない可能性があります。

他の検索エンジンクローラーを考えると、HTMLの方がクローラーの処理が適切に行われるケースが多いので、HTMLコーディングがクロールバジェットから推奨です。

④:404ページのクロールを少なくする

技術的な話をすると、掲載終了となった際に表示される404ページをクローラーが巡回することは、クロールバジェットを消費することになります。あなたのページの中にリンク切れのリンクがそのままにしてあるといった場合は、リンク切れの箇所を修正するなどの対応をするようにしましょう。

⑤:URLパラメーターで生成されるページの注意

大規模な検索サイトを作っているサイトは注意が必要です。検索サイトの場合、検索結果をURLパラメーターで表示されることもありますが、URLパラメーターが無数に生成されている場合、無数に生成されたページをクロールすることになり、クロールバジェットがかなり無駄遣いになります。

検索結果などで使われるURLパラメーターのページの取り扱いは、特に気をつける必要があります。

URLパラメーターをGETメソッドで表示させるのか、URLパラメーターページを表示させないようにPOSTメソッドで表示させるのかは、サイトのクロールバジェットを考える上で、非常に重要な意味合いを持ちます。

⑥:sitemap.xml(サイトマップエックスエムエル)を作成・更新しよう

クロールバジェットの最適化は、sitemap.xmlを作成・更新していくことが重要です。sitemap.xmlはxml形式で記述します。sitemap.xmlには、クロールをして欲しいあなたのサイトのURLを記述します。

このsitemap.xmlにクロールして欲しいURLを検索エンジンロボットに伝えることで、検索エンジンロボットはクロールする価値のあるページだと認識してクロールしてもらえることが期待できます。

一方で④で伝えた通り、404ページはクロールさせないようにという原則があります。404ページをクロールさせないように、sitemap.xmlに記載したURLのなかに、終了したページが存在していないかは定期的にチェックしていく必要があります。

⑦:多言語サイトはhreflangを設定すること

日本語以外に英語や中国語ページが、同じ内容で存在する場合はhreflangを設定しましょう。ページのローカライズ版があることを検索エンジンロボットに教えてあげることで、クロールバジェットの最適化をすることができます。

まとめ

クロールバジェットの最適化方法を伝えていきましたが、あなたのサイトではどのくらいできているでしょうか。大規模サイトであればあるほど、クロールバジェットの最適化はSEOで重要です。まだクロールバジェット最適化を行っていない人は、すぐに始めることができる内容から始めましょう!

The post クロールバジェットでSEO最適化を図る7つの方法 first appeared on 知ってほしいWebのあれこれ.]]>
h1のseo効果はどれくらいですか?と聞かれたら答えること。 https://web-tweets.com/seo/seo-effect-of-h1/ Thu, 10 Jan 2019 02:03:48 +0000 https://web-tweets.com/?p=252   「h1をSEO効果を発揮するために、こうしてください!」と提案した時に、「h1のSEO効果はどれくらいですか?」と聞かれたことが多々ありますし、この質問に共感する人も多いのではないでしょうか。 今回は、h1...

The post h1のseo効果はどれくらいですか?と聞かれたら答えること。 first appeared on 知ってほしいWebのあれこれ.]]>
 

「h1をSEO効果を発揮するために、こうしてください!」と提案した時に、「h1のSEO効果はどれくらいですか?」と聞かれたことが多々ありますし、この質問に共感する人も多いのではないでしょうか。

今回は、h1のSEO効果について語ります。

h1のSEO効果

前提:効果の明確な証明はできない

h1のSEO効果を理解するうえで重要なのは、「h1を適切したから○○順位が上がります!」というのは誰も分からないことです。理由としては「Googleのアルゴリズムは非公開」だからです。

そのため、h1をこうしたから、順位がこれぐらい上がるというのは断言できないはずと理解するべきです。

また、h1はSEOのすべてではありません。これができないからといって落胆するほどではありません。

h1のSEO効果は、SEOの基準の数あるうちの1つであり、適切にすることで多少の効果は見込めるものだと考えています。

SEO効果を知るにはh1タグの役割を理解すること

h1タグのSEO効果を知るためには、そもそものh1タグの役割を理解している必要があります。

<H1>~<H6>のHとはHeadingの略で、見出しを意味します。

引用:HTMLタグリファレンス「<H1>~<H6>」より

h1タグは見出しです。またh1は最上位の見出しにあたるものなので、ページの内容を示す見出し内容である必要があります。ページの最初の見出しとしてh1を使うのが適切であり、それを検索エンジンに正しく理解させる役割があります。

h1タグはページ全体を示す最初の見出しとして、文書構造を検索エンジンロボットに理解させるものだと思っています。

h1は文書構造を伝えるものなら、作文や論文と置き換えてみよう

h1は先ほど説明したように文書構造を検索エンジンロボットに分かりやすく伝えるためのものでもあります。文書構造というのであれば、作文や論文に置き換えてみるとh1タグの効果が朧げに見えてくると思います。

小学生の作文ルールと文書構造

小学生の作文提出時の作文ルールを思い出してみてください。

小学生の作文ルールは「題名」や「段落の最初は1文字空ける」、「句読点をつける」といったルールがあったはずです。それは、作文という文書を提出するときの文書構造を適切に提出するためのものであったはずです。

作文のルールを怠ると、いくらかの点数が減ったうえで点数を返されたのではないでしょうか。

大学生の論文と文書構造

また、大学の授業や大学受験でも小論文の提出と同じことが言えます。論文を提出するときに、論文タイトルや目次、見出しなどを適切に記載することを求められたのではないでしょうか。

そこにはやはり論文をわかりやすく伝えるための文書構造ルールがあったはずです。そして、小学生の作文と同じように、文書構造を守っていないものは、いくらかの減点をされることが想像できます。

作文や論文でいうならh1は採点基準の1つ

このように説明した来たように、h1は作文や論文で言うところの採点基準の1つであると考えています。それを考慮すると必ずしも多大な費用をかけて修正するほどではないと思っています。

ただし、作文や論文の題名をつけるといったルールが常識というものであれば、h1を適切に扱うこともまたSEOの常識の範疇であるともいえます。

適切に扱うことは求められると思ってください。

SEOで重要なh1タグの効果的な使い方や書く場所とよくある質問に答えます!

2018年9月8日

参考(他社の見解):h1のSEO効果

h1タグにSEO効果を期待したいところですが、これは直接順位に影響するのではなく、間接的に効果があるのではないかと考えられます。(引用:SEOラボ「h1タグのSEO効果」より
」)

適切なh1(=キーワードを含み、簡潔なページ要約になっているh1)は、あなたのWEBページの「他のSEO対策」の効果をより出やすくしてくれる、と言えます。

言うなればh1タグは、SEO対策の足がかりとなる、間接的ながら重要なSEO効果があるのです。(引用:SEO Pack「SEO1位のための「h1」タグ設定ガイド」より)

 

 

 

 

 

The post h1のseo効果はどれくらいですか?と聞かれたら答えること。 first appeared on 知ってほしいWebのあれこれ.]]>
h1タグがテキストではなく、画像imgタグでもよいかをSEO屋が教えます! https://web-tweets.com/seo/h1-img/ Sun, 23 Dec 2018 06:36:40 +0000 https://web-tweets.com/?p=243 SEOの基本的な内部施策の1つでもある<h1>タグ。それを使うべきだとは分かっているが、テキストではなく画像のimgタグを使用してもSEOで問題ないか知りたい人もいるのではないでしょうか。 今回は、<h...

The post h1タグがテキストではなく、画像imgタグでもよいかをSEO屋が教えます! first appeared on 知ってほしいWebのあれこれ.]]>
SEOの基本的な内部施策の1つでもある<h1>タグ。それを使うべきだとは分かっているが、テキストではなく画像のimgタグを使用してもSEOで問題ないか知りたい人もいるのではないでしょうか。

今回は、<h1>タグが画像タグでもよいのかや、その注意点を説明していきます。

h1タグはテキストではなく画像imgタグでもよい

h1タグは、テキストではなく画像imgタグでも問題ありません。テキストの方が評価されやすい可能性がありますが、本当にh1タグが画像であるべきなら、テキストにこだわりすぎる必要性はありません。

ウェブさん
h1タグが画像だからと言って、ペナルティになることはありません。

h1タグに画像を付ける場合の注意

h1タグが画像でも問題ないことは、既にお伝えしましたが、その時に注意するべきことがあります。下記には注意しましょう。

注意:h1タグが画像ならALT(オルト)は設定すること

h1タグが画像の場合、その画像にALT(オルト)は必ず設置するようにしましょう。

検索エンジンなどロボットは、基本的に画像がどういうものなのか内容が分かりません。そのため、画像がどんなものかをロボットに理解させる必要があります。

その時に、どんな画像かを補足してあげる役割を持つのがaltです。このaltを画像タグに設置をすることで検索エンジンのロボットが理解をすることができます。

<h1>が画像の場合、altを付けることで何の見出し(h1)なのかの理解がされます。

SEOで重要なh1タグの効果的な使い方や書く場所とよくある質問に答えます!

2018年9月8日
The post h1タグがテキストではなく、画像imgタグでもよいかをSEO屋が教えます! first appeared on 知ってほしいWebのあれこれ.]]>
構造化マークアップの効果と記述方法を解説 https://web-tweets.com/seo/structured-markup/ Thu, 22 Nov 2018 01:12:02 +0000 https://web-tweets.com/?p=227 SEOでできることのしたつもりだけど、もっとプラスアルファの施策を行いたい。そんな人は構造化マークアットを検討してみてもよいでしょう。今回は構造化マークアップの効果と記述方法について解説していきます。 構造化マークアップ...

The post 構造化マークアップの効果と記述方法を解説 first appeared on 知ってほしいWebのあれこれ.]]>
SEOでできることのしたつもりだけど、もっとプラスアルファの施策を行いたい。そんな人は構造化マークアットを検討してみてもよいでしょう。今回は構造化マークアップの効果と記述方法について解説していきます。

構造化マークアップとは

構造化マークアップとは、schema.orgの仕様通りにHTMLマークアップすることで、検索エンジンにページの正確な情報を理解をしてもらい、その情報を検索ユーザーに最適な検索結果として提供するものです。

構造化マークアップの効果は?

構造化マークアップをすることでどんな効果があるか気になるところですが、最適な検索結果を提供するものなので、次の画像のように表示される効果が見込めます。

商品の構造化マークアップの表示結果

商品の構造化マークアップ

商品に対して構造化マークアップをすると、検索結果上部にリッチなエリアで表示されます。

通常検索結果表示よりも、視覚的にページ内容の情報がより分かる表示結果のことをリッチスニペットと言います。

商品レビューや価格の構造化マークアップ

商品レビューや価格の構造化マークアップ

ページ内の口コミや商品価格を構造化マークアップすることで、その内容が検索結果に表示されます。

構造化マークアップによる表示は必ず保証されたものではない点に注意してください。

構造化マークアップの記述方法は3つ

記述方法①:(Google推奨)JSON-LD

JSON-LDの説明
ページの見出しや本文の <script> タグ内に埋め込まれる JavaScript 表記。このマークアップにはユーザーに表示するテキストをそのまま挿入しません。ネストされたデータアイテムを簡単に表現できます(Event の MusicVenue の PostalAddress の Country のように)。また、コンテンツ管理システムの JavaScript コードや埋め込みウィジェットなどの方法でページのコンテンツに動的に挿入される JSON-LD データも、Google は読み取ることができます。

(引用元:GoogleDevelopers「構造化データについて」より)

構造化マークアップを記述する方法の中で、おススメなのは「JSON-LD」による記述です。

可能であれば、構造化データには JSON-LD を使用することをおすすめします。

(引用元:GoogleDevelopers「構造化データについて」より)

何故、おすすめなのかというとGoogleの公式ホームページでも推奨していると記述があるからです。

また、JSON-LDは他の記述方法に比べて、記述場所に自由度があるので実装に対する工数面でもメリットがあります。

Googleが推奨しているのはJSON-LDですが、他の記述方法だから読み込まない!ということはないです。

JSON-LDで記述することの最大のメリットは、HTML内であればどこの記述でも良いことです。

 

どこの記述でも問題ありませんが、多くは<head>内に記述されることが一般的です。

後述で説明する他の構造化マークアップ記述は、マークアップを要素のタグに直接記述することが必要となります。つまり自由度がJSON-LDに比べて少ないのがデメリットとなります。

記述方法②:microdata

microdataの説明
HTML コンテンツ内に構造化データをネストするために使用される、オープン コミュニティの HTML 仕様。RDFa と同様に、HTML タグ属性を使用して、構造化データとして公開するプロパティに名前を付けます。通常はページの本文で使用しますが、見出しでも使用できます。

(引用元:GoogleDevelopers「構造化データについて」より)

microdataの記述は、ページ内のタグに直接マークアップを行います。JSON-LDが1塊でHTML内であればどこに記述しても良いのに対して、microdataは構造化マークアップをしたい要素内のタグに直接の記述が必要となります。

記述方法③:RDFa

検索エンジンに伝えたいユーザー表示コンテンツに対応する HTML タグ属性を追加することによって、リンク データをサポートする HTML5 の拡張機能。RDFa は一般に、HTML ページの見出しと本文の両方で使用されます。

(引用元:GoogleDevelopers「構造化データについて」より)

構造化マークアップの種類

構造化マークアップの用途はたくさんありますが、代表的な構造化マークアップの種類は下記のとおりです。

種類①:パンくずの構造化マークアップ

サイト内に表示されるパンくずリストをより効果的に検索エンジンに伝えるために行うのが、パンくずの構造化マークアップです。

これを行うことで、検索結果にマークアップしたパンくずが下記のように表示されます。

パンくずの構造化マークアップ

種類②:ロゴ画像のマークアップ

組織や企業で使われているロゴ画像も構造化マークアップをすることができます。このロゴ画像のマークアップを行うと、検索結果のナレッジパネルに構造化マークアップを行なったロゴ画像が表示されます。

種類③:商品構造化マークアップ

ECサイトでは一般的となりつつある商品の構造化マークアップは、ECサイトで重要です。なぜなら検索結果の表示に「価格」や「評価レビュー」の表示がされ、クリック率向上が見込めるなど、恩恵が大きいと考えられます。

どの構造化マークアップを行うかどうかは、下記が個人的な推奨の構造化マークアップのリストです。

属性 必須 説明
name 必須 商品の名前
image 必須 商品画像のURL
description 推奨 商品の説明
brand 推奨 商品のブランド
review 推奨 商品のレビュー
aggregateRating 推奨 商品の評価
offers 推奨 商品の価格など購入に関する情報

ECサイトでは是非、商品の構造化マークアップを行うことをおすすめします。

wordpressの構造化マークアップはプラグインでも

wordpressでサイトを運用している場合に、便利なのがプラグインです。

プラグインは様々ありますが、構造化マークアップについてもプラグインがあるので、既存のwordpressと干渉を起こさないのであれば、積極的に使うことをおすすめします。

実際に探した中では、下記のプラグインがありました。

Markup (JSON-LD) structured in schema.org — WordPress Plugins

wordpressのプラグインは、プラグイン同士の相性が悪い場合表示崩れが起こる可能性があります。そのため、プラグインを使うことで不具合がないかは検証が必要です。
ウェブさん
その他にも、構造化マークアップの実装を助けるプラグインがあると思いますので、探してみましょう!

構造化マークアップの検証はどうやる?

では、実際に構造化マークアップを実装しようと試してみたはいいものの、問題なく実装できているか確かめたいものです。そんな時にどうやって構造化マークアップの検証をすれば良いでしょうk。あ

下記2つの方法を紹介します。

方法①:目視で確認

構造化マークアップが実装されているかどうかを検証する方法の1つに、目視でソースを確認する方法があります。この方法では実際にページを表示した後に、ソースを表示して構造化が正しくできているかを確認することになります。

ただ、目視では実際に問題なく構造化マークアップされているかを確認することは、困難です。

次の方法が検証しやすいです。

方法②:Googleのテストツールで確認

Google様様というところですが、Googleは構造化マークアップが正しく実装されているかどうかを確認する検証ツールを提供しております。下記から実際にテストツールのサイトに行くことができます。

まとめ

以上が構造化マークアップの説明となります。

今回説明した構造化マークアップの話は全体の中の本当に一部です。構造化マークアップできる数は本当にたくさんあります。どんな構造化データをマークアップするかは検討するのが必要でしょう。

構造化マークアップは、検索表示結果をリッチにしてくれる効果が見込めます。

基本的なのは、パンくずの構造化マークアップですが、ECサイトの場合は商品の構造化マークアップの検討をお勧めします。

The post 構造化マークアップの効果と記述方法を解説 first appeared on 知ってほしいWebのあれこれ.]]>
不動産サイトの生命線!エリア検索キーワードのSEO対策3選 https://web-tweets.com/seo/area-real-estate/ Fri, 09 Nov 2018 03:50:04 +0000 https://web-tweets.com/?p=212 不動産サイトなど、物件情報を検索できるサイトはシステムも関わるので、大規模な開発となりがちです。そのため、いったんサイトをリリースした後にSEO対策を施そうとすると、それなりの追加修正費用を要します。 そのため、できるだ...

The post 不動産サイトの生命線!エリア検索キーワードのSEO対策3選 first appeared on 知ってほしいWebのあれこれ.]]>
不動産サイトなど、物件情報を検索できるサイトはシステムも関わるので、大規模な開発となりがちです。そのため、いったんサイトをリリースした後にSEO対策を施そうとすると、それなりの追加修正費用を要します。

そのため、できるだけ不動産の検索サイトを作る場合には基本となるSEO対策を知っておきたいものです。

今回は、不動産サイトにとって集客の生命線である「エリア」系キーワードのSEO対策を3つ解説していきます。

不動産サイトのSEO対策の基本は「エリア」のキーワード

不動産サイトの運営をするにあたり、集客戦略上で重要なのは「エリア」系キーワードです。店舗周辺のエリアであったり、物件が存在するエリアで物件を探しているユーザーは、顕在層に近いキーワードで集客が見込めます。

検索一覧ページ「エリア×(新築or中古)×種別(マンションor戸建て etc)」

不動産サイトで物件検索システムを保有するときに、ターゲットキーワードとなるのが「エリア×(新築or中古)×種別」系キーワードです。

検索一覧ページで狙えるSEOキーワード

「中央区 新築戸建て」「世田谷 中古マンション」「港区 新築マンション」など

上の画像は、エリアを掛け合わせたキーワードの検索ボリュームをGoogleのキーワードプランナーから抽出したものです。

赤枠内の「文京 区 新築 マンション」であれば月間の検索ボリュームは590回されています。

Yahoo!の検索回数は、Googleの検索回数の2倍と言われています。そのため、「文京 区 新築 マンション」のGoogleとYahoo!の検索回数は1,770回と想定されます。

また、上の画像内にキーワードあたりの広告出稿金額単価の目安が記載されています。なんと「文京 区 新築 マンション」は、1クリックの広告で生じる金額は”897円”となっています。

ウェブさん
問合せにつながるかどうかも分からない広告に、ワンクリック900円というのは高いように感じますね!SEOで集客できれば、その方が費用対効果がいいことが考えられます!

不動産サイトの「エリア」系キーワードSEO対策

では、ここからは「エリア」系キーワードを獲得するためのSEO対策を3つ解説していきます。

SEO対策①:エリア検索一覧ページのインデックス対策

エリア系キーワード対策で、最も重要なのが検索結果で表示される「エリア検索ページ」をインデックスさせることです。

インデックスされるには大まかに次のような条件が必要です。

  • エリア検索結果一覧ページのURLがユニークである
  • テキストリンクで辿れるようにする

検索一覧ページは静的URLが理想

エリア検索結果一覧ページのURLがユニークであることが必要だとお伝えしましたが、検索結果の一覧ページは静的なURLが理想です。一方で静的なURLの反対は、動的なURLがあります。

静的なURL(スタティックURL)の例
https://www.example.com/mansion/shinchiku/tokyo/chiyodaku/
ウェブさん
Googleは意味のあるURLを好みます。そういった意味で静的なURLがおすすめです。その背景には静的なURLの方がユーザーの可読性が高いからともいわれています。
動的なURL(ダイナミックURL)の例
https://www.example.com/dir/search/list.php?eki=030&mb=0&price_order=0
動的なURLが全くダメということではありません。そのため、既にあるサイトが動的なURLで、静的なURLに変更するのは、難易度が高く失敗する可能性があるので注意が必要です。

動的か静的なURLの違いは、「?」「=」「&」などパラメーターが含まれているかどうかです。パラメーターを含んでいなければ静的なURLとみなされます。

動的URLパラメーターのデメリット

インデックスさせるにあたり動的URLでも問題ないことを言いましたが、それでもデメリットは存在します。次のようなデメリットは把握しておこう。

  • URLが長い
  • URLが長いとGoogleのクロール負荷が高い
  • コピペしづらい
  • 紙媒体に長いので載せづらい

対策②:検索チェックボックス内にテキストリンクを設置

チェックボックス内のテキストリンク

URLのインデックス促進や上位表示のためのSEOテクニックの1つとして、チェックボックス内に検索結果一覧のテキストリンクを設置しましょう。

テキストリンクによるサイト内の内部リンク増加は、基本的なSEOテクニックです。また、不動産サイトは検索チェックボックスが存在することも多いので、基本的なSEO施策として覚えておきましょう。

対策③:一覧ページに関連リンク設置

関連エリアのリンク

該当エリアの検索結果一覧ページに、関連(近隣)エリアのテキストリンクを設置することは、SEO施策として有効です。

こういった関連リンクを設置することで回遊性を高めることが見込めます。千代田区で探している人は中央区でも物件を探しているかも知れません。

Googleの評価基準の前提には、ユーザーの役に立つということがあります。その観点からすると、近隣エリアのリンクはSEOに重要で有効な施策であると言えます。

The post 不動産サイトの生命線!エリア検索キーワードのSEO対策3選 first appeared on 知ってほしいWebのあれこれ.]]>
過去にペナルティを受けた中古ドメインは、悪い効果は引き継ぐ? https://web-tweets.com/seo/used-domain-penalized/ Tue, 06 Nov 2018 05:59:36 +0000 https://web-tweets.com/?p=194 サイト運営のためにドメインを購入しても、既に誰かが運用したことのある中古ドメインかもしれません。それは良いサイト運営していたドメインかもしれませんが、Googleからペナルティを受けたことがあるドメインかもしれません。 ...

The post 過去にペナルティを受けた中古ドメインは、悪い効果は引き継ぐ? first appeared on 知ってほしいWebのあれこれ.]]>
サイト運営のためにドメインを購入しても、既に誰かが運用したことのある中古ドメインかもしれません。それは良いサイト運営していたドメインかもしれませんが、Googleからペナルティを受けたことがあるドメインかもしれません。

昔良いサイト運営をやっていたドメインであれば問題はありませんが、過去にペナルティを受けていたドメインだと悪影響を引き継ぐ不安があるのではないでしょうか。

今回は過去にペナルティを受けた中古ドメインを購入した場合に、過去のペナルティを受けた影響が引き継がれるのかどうかについて説明していきます。

中古ドメインとは

中古ドメインとは、1度でも他の人が、そのドメインでサイト運営されたことがあるドメインを指します。

通常、ドメインは1年など契約期間ごとに更新していきます。元々ドメインを契約した人が更新をしない場合は、そのドメイン所有者としての権利がなくなります。

つまり、あなたが購入したドメインは、契約が切れた過去使用済みの中古ドメインである可能性があるのです。

ではあなたが購入した以前のドメインが、どのようなサイトを運営していたか気になる方は次のような方法で調べることができます

ドメインの過去を知る方法:Wayback machine

もし、購入予定のドメインや購入したドメインが今までどんなサイトを運営していたかどうかはWayback Machineで調べることができます。

このWaybackMachineでは、検索窓にURLを入力すると、そのドメインのヒストリーを観ることができます。つまり、調べたドメインの過去のページを見ることができます。

WaybackMachineは完全ではありません。WaybackMachineのヒストリーに入っていない場合もありますので、WaybackMachineの追える範囲で活用してください。

中古ドメインは高値で取引されることも

中古ドメインはSEOに悪影響や良い影響を与える存在なのか。

それを理解するためには、特定の中古ドメインが高値で取引されている現状を知っておく必要性があります。

なぜ、高値で取引されているのか。それは次のような理由が挙げられます。

良い中古ドメインを利用する2つのメリット
  • 検索エンジンでインデックスされやすくなる
  • 検索順位が上がりやすくなる

一方で、過去にペナルティを受けたドメインは次のようなデメリットを被ると考えられています。

過去ペナルティを受けた中古ドメインの2つのデメリット
  • 検索エンジンでインデックスされづらい
  • 検索順位が上がりづらい

もし、過去にペナルティを受けていた中古ドメインを購入した場合、インデックスや順位が上がりづらいなど、不利益を被る可能性があるといわれています。

ただし、今回の争点はここです。本当に中古ドメインの過去によって、インデックスや順位が変わりやすいのかどうかです。それは次の説明移行で分かります。

過去の中古ドメインのペナルティは引き継ぐのか

中古ドメインへの被リンク(バックリンク)がペナルティ対象となった中古ドメインはどうなるでしょうか。

新しい所有者へペナルティが引き継がれるのでしょうか?

Google公式見解「所有者が変わればペナルティは引き継がれない」

「グーグルは、新しいドメイン所有者に変わるとバックリンクをリセットすると主張している」

引用元:Suzukikenichi.com「期限切れドメインは役に立たない」より

引用ではあるが、新しいドメイン所有者になった段階でバックリンクはリセットされるものであると説明されています。

つまり、必ずしも過去ドメインのバックリンクは引き継がれるものでもないと考えられます。

私の経験:6,7年前に明らかにネガティブなドメインを取得したが問題なかった

私も中古ドメインを購入して、新しいテーマでサイトを運営しています。

そして、その中古ドメインは明らかに健全なドメインとは考えづらいものでしたが、全く私のサイト運営に影響はなく、順位もトラフィックも順調に上がってきています。

その中古ドメインが使用されたのが、6,7年前という長い間使われなかったことも起因するかもしれません。

直前まで所有者がいた中古ドメインは注意が必要

今までの説明から、過去のペナルティの基となるバックリンクは引き継がれないので、問題ないですよ!と言えるのかもしれません。

ただし、1点注意があるとすれば、あまりにも直近(1年ぐらいか。)に、ペナルティを受けてしまうようなネガティブなサイトを運営していたドメインは、購入を控えた方がよいかもしれません。

なぜなら、新しい所有者に変更したとGoogleが認識されるの期間もある程度必要であるとも考えられからです。

バックリンクの否認を行う場合でも、Googleの再審査には、ある程度時間がかかっています。それを考慮すると、無条件に、所有者が変わるから悪影響はなし!と中古ドメインを購入するのは危険だと思います。

もし、ドメインを購入する場合は、過去にどんなサイトを運営しているかを確認するようにしましょう!

The post 過去にペナルティを受けた中古ドメインは、悪い効果は引き継ぐ? first appeared on 知ってほしいWebのあれこれ.]]>
レスポンシブにサイトリニューアルした時のSEOでよくある失敗 https://web-tweets.com/seo/responsive-seo-failure/ Mon, 05 Nov 2018 05:21:29 +0000 https://web-tweets.com/?p=189 別URLでスマホサイトを構築していて、URLが同一のレスポンシブサイトへの移行をサイトリニューアルのタイミングで行うことも多いのではないでしょうか。 しかし、別URLからレスポンシブサイトへ移行した時にSEOの正しい設定...

The post レスポンシブにサイトリニューアルした時のSEOでよくある失敗 first appeared on 知ってほしいWebのあれこれ.]]>
別URLでスマホサイトを構築していて、URLが同一のレスポンシブサイトへの移行をサイトリニューアルのタイミングで行うことも多いのではないでしょうか。

しかし、別URLからレスポンシブサイトへ移行した時にSEOの正しい設定を行わないと、流入数が減るかもしれません。

私の経験から、別URLのスマホサイト構築からレスポンシブサイトへ移行した時のよくある失敗を公開します。

レスポンシブサイト移行でよくある失敗

よくある失敗①:<alternate>タグの取り忘れ

スマホページが別URLの場合、レスポンシブサイトへ移行するときは、<alternate>タグを取らなければなりません。

別URLのスマホだけど、元々そんな<alternate>タグなんてつけてない!というけしからん人は話をスキップしてもらって問題ありません。

本来、スマホサイトが「/sp/配下」にあるなど別URLの場合、PCに<alternate>タグを設定する必要があります。これは本来、PCの代替ページであるSPページの存在を検索エンジンロボットに伝えるためです。

<alternate>タグについてもっと知りたい方はGoogle Developersの「別々の URL」をご参照ください。

本来<alternate>タグは、PCとスマホが別URLの場合に設定するものです。そのためレスポンシブサイトは1URLとなるので、<alternate>タグは残して置かず、削除しましょう!

よくある失敗②:sitemap.xmlの更新漏れ

レスポンシブサイトへの移行で、PCとスマホページが別のURLの場合、sitemapの記述更新を行う必要があります。

レスポンシブサイトに移行した後に、不要なスマホ用URLの記述が残っている場合、sitemap.xmlを削除するなど更新対応を行いましょう!

無駄なURLがsitemap.xmlあるのは、よい状態ではありません。なぜなら、sitemap.xmlに記述するべきなのは、本来はインデックスしたいURLを記載するべきだからです。レスポンシブサイトへの移行はバタバタするものなので、落ち着いた段階でsitemap.xmlの更新を行いましょう!

よくある失敗③:クローラーが巡回できない設定になっていた

レスポンシブサイトを公開する前は、インデックスさせないようにクローラーが巡回できないように設定をしているケースがあります。

その場合、レスポンシブサイト公開後にその設定を削除する必要があります。

削除しないと公開してもクローラーが巡回できずに評価が落ちてしまうことがあります。

新しく作ったレスポンシブサイトを検索エンジンロボットが見られないのであれば、流入数や順位が下がることはしょうがないですね!

今後、レスポンシブにして流入数や順位が下がった場合によくある失敗について随時更新していきます!

 

 

The post レスポンシブにサイトリニューアルした時のSEOでよくある失敗 first appeared on 知ってほしいWebのあれこれ.]]>