GoogleAnalyticsでGoogleによってレンダリングされたURLを表示する方法

公開: 2021-06-11

まず第一に、翻訳を手伝ってくれたクリスチャンに特に感謝します!

Googleが、携帯電話を持っている実際のユーザーが見るのと同じように、Javascriptをクロールしてコンテンツをロードする能力を大幅に改善し始めてから、数年が経ちました。

それでも、インフラストラクチャを改善しても、Googleが見つけたすべてのURLをクロールすることはできません。これは、クロールとレンダリング(HTMLドキュメントを視覚的な構造に変換するプロセス)のコストが、単にクロールして取得するよりもはるかに大きいためです。 URLのHTML。 Google自体がこれを認めているため、特に大規模なサイトやクライアントによって実行されているJSに依存するサイト(CSR、クライアント側レンダリング)で、Googleがサイトの最も重要なURLを見つけ、レンダリングし、インデックスを作成するようにすることが重要です。

数年前、URLのコンテンツを評価し、それをインデックスに追加するかどうかを決定するために、GoogleはURLのHTML(およびそこにリンクされている画像)を取得するのに十分でした。 そのHTMLは、レンダリング後にJavascriptを使用してそのHTMLが変更されたかどうかを考慮せずに、GoogleがURLのインデックス作成とランク付けに使用したコンテンツでした。

現在、HTMLクライアント側を変更するJavascriptフレームワークの誇大宣伝により、Googleは、コンテンツをレンダリングして取得するために、HTML、JSコード、CSSスタイル、およびその他のリソース(画像、フロントなど)を取得する必要があります。最終的なHTMLなので、インデックスに移動するかどうかを決定できます。

このプロセス全体は、通常のユーザーが見るように1つのバッチで実行されるわけではありません。つまり、2つのステップで実行されます。 まず、GoogleはURLをクロールし、「レンダリングされていない」HTMLを取得し(これまでと同様)、しばらくすると(指定された一定の時間なしで)、そのHTMLで参照されている残りのリソースを取得して試行します。ページをレンダリングして、最終的なレンダリングされたHTMLを取得します。 この2番目のステップは、「インデックス作成の2番目の波」と呼ばれます。

多数のURLをクロールしてインデックスを作成するために、それらをレンダリングするコストは、時間とリソースの両方で、レンダリングされていないHTMLを取得するよりもはるかに大きいことを理解するために多くの技術的知識を持っている必要はありません。 したがって、同じ量の有限のリソースを使用して、Googleは、URLをレンダリングする必要がある場合に、より少ないURLをクロールしてインデックスに登録できるようになります。 そのため、GoogleはレンダリングするURLとレンダリングしないURLを決定/優先順位付けする必要があります。

次にクロールするURLを決定するために、Googleは、各URLのPageRankとして他の要因を考慮して、またはWebマスターがクロールに関する特定の設定を構成しているかどうかを考慮して、そのURLが最後にクロールされてから変更された確率を計算します。周波数。 変更されていないものをクロールするために限られたリソースを費やすことは役に立たないため、これは理にかなっています。

この記事はあまり知られていないと思うので、この記事を共有したいと思います。Googleが次にクロールするURLを決定する方法を理解するために、非常にわかりやすくなる可能性があります。 これはGoogleのエンジニアによって書かれたものであり、実際の問題を解決するための数学的抽象化です。 数式を怖がらないでください。データサイエンティストではない人のために完全に説明されています。

次にクロールするURLを決定した後、Googlebotは、クロールされたURLごとに、そのURLをレンダリングするかどうかを決定する必要があります。また、URLをレンダリングすることを決定した場合、それを実現するためにすべてのリソースが必要になります。 必要な各リソースを要求する必要があるかどうかを判断するために、おそらく同様の数学的プロセスを使用しますが、キャッシュ時間、リソースの取得コストなどのいくつかの違いがあります。

これらすべてのために、私たちのサイトのどのURLがGoogleによってクロールされているか、またどのURLがレンダリングされているかを知ることは非常に重要です。 Funnel▼Punk(大きなウェブサイトで作業している)で使用するその情報を取得する簡単な方法は、サーバーログを分析することです(これについては、私のブログ、スペイン語、およびOncrawlのブログに投稿されています)。 )、Googlebotが私たちのサイトで行っていることの全体像を取得します。 ログ分析は多くの人にとって面倒で費用がかかる可能性があるため、GoogleAnalyticsでGooglebotによってレンダリングされているURLを追跡する方法を共有したいと思います。

[ケーススタディ]Googleのボットクロールの管理

26,000を超える製品リファレンスがある1001Pneusは、SEOパフォーマンスを監視し、Googleが適切なカテゴリとページにクロール予算を費やしていることを確認するための信頼できるツールを必要としていました。 OnCrawlを使用してeコマースWebサイトのクロール予算を適切に管理する方法を学びます。
ケーススタディを読む

GoogleによってレンダリングされたURLの追跡

この方法は、少なくとも開発チームや、PHPなどで作業するために使用されるWebマスターにとっては、比較的単純です。 3つのステップがあります。

  1. JavaScriptコードを追加する
    このコードは、Googlebotが通常のユーザーと同じようにJavascriptを実行したことを検出し、Javascript(透明ピクセル)を使用して画像を読み込みます。
  2. サーバー構成
    透明ピクセルのURLが要求されたときに、PHPファイル(またはバックエンドで使用されるその他のプログラミング言語)を実行するようにサーバーを構成します。
  3. データをGoogleAnalyticsに送信します
    PHPファイルは、Googlebotが本当にGooglebotであるかどうかを確認し、そうである場合は、データをGoogleAnalyticsに送信します。

JavaScriptコードを追加する
私が試したさまざまな実験で、Javascriptコードがユーザーの操作を必要としない場合にのみGooglebotがJavascriptを実行することを確認しました。 たとえば、Googlebotは、onloadまたはonreadyイベントでトリガーされるJavascriptコードを実行します。 この例では、onLoadイベント、つまりページのすべての要素が読み込まれたときにトリガーされる関数を作成します。

この関数は、ユーザーエージェントにGooglebotの既知のボットが含まれているかどうかを確認し、含まれている場合は、TransparentPixelGooglebot.gifという名前の画像(透明ピクセル)を読み込みます。

 <スクリプト>
window.addEventListener( "load"、function(){
    var botPattern = "googlebot | Googlebot-Mobile | Googlebot-Image | Google favicon | Mediapartners-Google";
    var re = new RegExp(botPattern、'i');
    var userAgent = navigator.userAgent; 

    if(re.test(userAgent)){
        var client = new XMLHttpRequest();
        var trackRenderURL ='https://www.mecagoenlos.com/TransparentPixelGooglebot.gif?OriginUrl='+window.location.href;
        
        client.open('GET'、trackRenderURL);
        client.setRequestHeader('Content-Type'、'text / plain; charset = UTF-8');
        client.send(null);
    }
});
</ script>
GooglebotがJavascriptにアクセスして実行すると、関数がトリガーされ、「TransparentPixelGooglebot.gif」画像が読み込まれ、画像のURLに、アクセスされた特定のURLを指定するパラメータが追加されます。

この変数では、「TransparentPixelGooglebot.gif」画像をロードするために要求される完全なURLを作成します。ここで、アクセスされたURLとそれを要求しているユーザーエージェントを追加します。

 var trackRenderURL ='https://www.mecagoenlos.com/TransparentPixelGooglebot.gif?OriginUrl='+window.location.href;

サーバー構成(.htaccess)

次のステップは、ピクセルのURL(TransparentPixelGooglebot.gif)が要求されるたびに、PHPファイル(GooglebotRenderJS.php)が実行されるようにサーバーを構成することです。

これを行うには、.htaccessファイルにいくつかの変更を加える必要があります(バックエンドプログラミング言語としてApacheサーバーとPHPを使用しているため)

これらの2つの特定の行は、それを実現するものです。

 RewriteCond%{REQUEST_URI} TransparentPixelGooglebot.gif
RewriteRule TransparentPixelGooglebot.gif(。*)$ https://www.mecagoenlos.com.com/GooglebotRenderJS.php$1

ご想像のとおり、ピクセルリクエストに含まれるパラメータは、PHPファイル(GooglebotRenderJS.php)がそれらを「読み取る」ことができるように伝播されます。

オンクロールデータ³

追加のデータセットへのシームレスな接続で分析を拡張します。 バックリンク、SEOトラフィック、ランキング、およびCRM、監視ソリューション、またはその他のソースからのカスタムデータセットに関するデータに基づいて、SEO戦略を分析します。
もっと詳しく知る

PHPファイルからGoogleAnalyticsにデータを送信します

最後のステップでは、ピクセル(TransparentPixelGooglebot.gif)が要求されるたびに実行されるPHPファイル(GooglebotRenderJS.php)を作成します。

このファイルは次のようになります。

  1. 逆引きDNSを使用して、リクエストが実際にGooglebotによって行われたのか、Googlebotのユーザーエージェントを使用して偽のGooglebotによって行われたのかを確認します
  2. ボットの種類を特定します(Googlebot Mobile、画像、広告など)
  3. 次の変数を割り当てるイベント内で、(Google Analyticsの測定プロトコルを使用して)GoogleAnalyticsにデータを送信します。
  • イベントカテゴリ:「GoogleRenderFromHtaccess」
  • イベントアクション:レンダリングされたURL(ピクセルリクエストのリファラー)
  • イベントラベル:ユーザーエージェント、IP、およびボットが本物のGooglebot(「本物」)か偽物(「偽物」)かを連結した文字列。 Googlebotの識別が正しく機能しているかどうかを確認するために、3つをGAに送信します。
  • *重要:すべてが正しく機能しているかどうかをテストするために、IPを数日間だけ保存しました。その後、データ保護法に問題が発生した場合に備えて、保存を停止しました。
 <?php

header( "Pragma-directive:no-cache");
header( "Cache-directive:no-cache");
header( "Cache-control:no-cache");
header( "プラグマ:キャッシュなし");
header( "Expires:0");
if($ _GET ["OriginUrl"])
    $ src = $ _ GET ["OriginUrl"];
そうしないと
    $ src = $ _SERVER ['HTTP_REFERER']; 
$ UA = $ _ SERVER ["HTTP_USER_AGENT"]; 
$ RenderParameters = $ _ GET ["RenderParameters"];
関数GoogleCheker($ Ip){

    #不必要なルックアップを回避するために、UAが次のいずれかに一致するかどうかのみを確認してください
    #私たちが好きなボット
    
        $ hostname = gethostbyaddr($ Ip);    
        $ ip_by_hostname = gethostbyname($ hostname);   
        if(preg_match( "/ googlebot / i"、$ hostname))
        if($ ip_by_hostname == $ Ip)
            trueを返します。
        そうしないと
                falseを返します。
        
        そうしないと
                falseを返します。
        
        
}
関数GoogleChekerExtend($ Ip){

    #不必要なルックアップを回避するために、UAが次のいずれかに一致するかどうかのみを確認してください
    #私たちが好きなボット
    
        $ hostname = gethostbyaddr($ Ip);    
        $ ip_by_hostname = gethostbyname($ hostname);   
        if(preg_match("/\.google\.com[\.]?$/i",$hostname))
        if($ ip_by_hostname == $ Ip)
            trueを返します。
        そうしないと
                falseを返します。
        
        そうしないと
                falseを返します。
        
        
}
$ botname = "Init";
$ bots = array('Mediapartners-Google [/]([0-9。] {1,10})' =>'Google Mediapartners'、
    'Mediapartners-Google' =>'Google Mediapartners'、
    'Googl(e | ebot)(-Image)/([0-9。] {1,10})' =>'Google画像'、
    'Googl(e | ebot)(-Image)/' =>'Google画像'、
    '^ gsa-crawler' =>'Google'、
    'Googl(e | ebot)(-Sitemaps)/([0-9。] {1,10})?' =>'Google-サイ​​トマップ'、
    'GSiteCrawler [/ v] *([0-9.az] {1,10})?' =>'Google-サイ​​トマップ'、
    'Googl(e | ebot)(-Sitemaps)' =>'Google-Sitemaps'、
    'Mobile。*Googlebot'=>'Google-Mobile'、
    '^ AdsBot-Google' =>'Google-AdsBot'、
    '^ Feedfetcher-Google' =>'Google-Feedfetcher'、
    '互換性; Googleデスクトップ'=>'Googleデスクトップ'、
    'Googlebot' =>'Googlebot');

foreach($ bots as $ pattern => $ bot){
if(preg_match('#'。$pattern。'#i'、$ UA)== 1)
{{
    $ botname = preg_replace( "/ \\ s {1、} / i"、'-'、$ bot);
    壊す;
}
}

if(GoogleCheker($ _ SERVER ['REMOTE_ADDR']))
    $ isGoogle = "Real";
elseif(GoogleChekerExtend($ _ SERVER ['REMOTE_ADDR']))
        $ isGoogle = "Extend";
    そうしないと
        $ isGoogle = "Fake";

クラスBotTracker{
    
    静的関数track($ s、$ params){
        
        
            
            $ bot = "";
            
            $ data = array( 
                'v' => 1、 
                'tid' =>'UA-XXXXXXX-1'、
                'cid' => self :: generate_uuid()、 
                't' =>'イベント'、
                'dh' => $ s ['HTTP_HOST']、 
                'dl' => $ s ['REQUEST_URI']、 
                'dr' => $ s ['HTTP_REFERER']、	
                'dp' => $ s ['REQUEST_URI']、 
                'dt' => $ params ['page_title']、 
                'ck' => $ s ['HTTP_USER_AGENT']、 
                'uip' => $ s ['REMOTE_ADDR']、
                'ni' => 1、
                'ec' =>'GoogleRenderHtaccess'、
                'el' => $params['UA']。"-"。$params["RenderParameters"]。"-"。$params['botname']。"-"。$params['isGoogle']。 " --ip:"。$s ['REMOTE_ADDR']、//テスト後に削除
                //'el' => $params['UA']。"-"。$params["RenderParameters"]。"-"。$params['botname']。"-"。$params['isGoogle'] 、
                'ea' => $ params ['RenderedURL']
            );
            
            $ url ='http://www.google-analytics.com/collect';
            $ content = http_build_query($ data); 
    
            $ ch = curl_init();
            curl_setopt($ ch、CURLOPT_USERAGENT、$ s ['HTTP_USER_AGENT']);
            curl_setopt($ ch、CURLOPT_URL、$ url);
            curl_setopt($ ch、CURLOPT_RETURNTRANSFER、1);
            curl_setopt($ ch、CURLOPT_CONNECTTIMEOUT、0);
            curl_setopt($ ch、CURLOPT_CONNECTTIMEOUT_MS、0);
            curl_setopt($ ch、CURLOPT_TIMEOUT_MS、0);
            curl_setopt($ ch、CURLOPT_HTTPHEADER、array('Content-type:application / x-www-form-urlencoded'));
            curl_setopt($ ch、CURLOPT_HTTP_VERSION、CURL_HTTP_VERSION_1_1);
            curl_setopt($ ch、CURLOPT_POST、1);
            curl_setopt($ ch、CURLOPT_ENCODING、 "gzip");
            curl_setopt($ ch、CURLOPT_POSTFIELDS、$ content);
            $ result = curl_exec($ ch);
            $ info = curl_getinfo($ ch);
            curl_close($ ch);
        }
        静的プライベート関数generate_uuid(){
        
        return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x'、
            mt_rand(0、0xffff)、mt_rand(0、0xffff)、
            mt_rand(0、0xffff)、
            mt_rand(0、0x0fff)| 0x4000、
            mt_rand(0、0x3fff)| 0x8000、
            mt_rand(0、0xffff)、mt_rand(0、0xffff)、mt_rand(0、0xffff)
        );
    }
    
    
    
    
    
}
 BotTracker :: track($ _ SERVER、array( "page_title" => "VirtualRenderTitle"、 "RenderedURL" => $ src、 "isGoogle" => $ isGoogle、 "botname" => $ botname、 "UA" => $ UA 、"RenderParameters" => $ RenderParameters));

?>

セットアップがGoogleAnalyticsで機能しているかどうかを確認します

すべてがセットアップされました! これで、すべてが期待どおりに機能しているかどうかを確認できます。 これを行うには、Google Analyticsのリアルタイムレポートを使用して、「イベント」レポートを選択します。 別のタブで、検索コンソールを開き、Webサイトのプロパティに移動し、URLインスペクターを使用して、Googleに任意のURLをクロールしてレンダリングさせます。 すべてが機能している場合は、Googleアナリティクスのリアルタイムイベントレポートに新しいイベントが表示されます。

ご覧のとおり、これらのイベントは「nonInteraction」パラメーターで構成されているため、当サイトではアクティブユーザーとしてカウントされません。

イベントカテゴリ「GoogleRenderFromHtaccess」をクリックすると、ユーザーエージェント、IP、およびボットが本物か偽物かを確認できます。

GoogleがURLをレンダリングしようとして生成されたトラッキングエラー

GoogleによってレンダリングされているURLを追跡および確認する方法についてはすでに説明しました。 しかし、さらに進んで、GoogleがサイトのURLをレンダリングしようとしたときに生成されるJavascriptエラーを追跡することができます。

Javascriptがレンダリングされると、ユーザーのブラウザにのみ表示される(サーバーには表示されない)エラーが生成される可能性があるため、これらのエラーを追跡するのは簡単な作業ではありません。

現在、GooglebotがURLをレンダリングするときに生成されるJavascriptエラーを確認したい場合は、検索コンソールのURLインスペクターを使用してのみ確認できます。

  1. URLを調べます:
  2. 「ライブURLのテスト」をクリックします。
  3. エラーがあるかどうかを確認します。

多くのURLに対してこれを手動で行うのは大変な作業ですが、GooglebotがURLをレンダリングしようとしたときに、Javascriptエラーがあるかどうかを追跡するために先ほど示したコードを使用できます。

コードが機能しているかどうかを確認するために意図的に生成されたエラーの例:

Javascriptコードを追加する
前の例で行ったのと同じ方法で、次のコード行を使用してJavascriptエラーをキャプチャします: "window.addEventListener('error', function(e)"

エラーが発生するたびに、それらのエラーを保存してGoogleAnalyticsに送信できる関数が実行されます。 これは前の例で行ったことと非常に似ていますが、この関数はJavascriptエラーがある場合にのみ実行されるという警告があります。

 window.addEventListener('error'、function(e){
        var botPattern = "googlebot | Googlebot-Mobile | Googlebot-Image | Google favicon | Mediapartners-Google";
        var re = new RegExp(botPattern、'i');
        var userAgent = navigator.userAgent; 
        if(re.test(userAgent)){
            var client = new XMLHttpRequest();
            varErrorsURLPixel ='https://www.mecagoenlos.com/TransparentPixelGooglebotError.gif?OriginUrl ='+ window.location.href +'&textError ='+ unscape(encodeURIComponent(e.message))+'&LineError ='+ unscape(encodeURIComponent (e.lineno.toString()))+'&UA ='+ unscape(encodeURIComponent(userAgent));
        
            client.open('GET'、ErrorsURLPixel);
            client.setRequestHeader('Content-Type'、'text / plain; charset = UTF-8');
            client.send(e);
        }
    });

このコードは、別の透明ピクセル(TransparentPixelGooglebotError.gif)をロードする関数を実行し、レンダリングされるURL、エラー、およびユーザーエージェントをパラメーターとして追加して、次のようなURLへのリクエストを生成します。

 varErrorsURLPixel ='https://www.mecagoenlos.com/TransparentPixelGooglebotError.gif?OriginUrl ='+ window.location.href +'&textError ='+ unscape(encodeURIComponent(e.message))+'&LineError ='+ unscape(encodeURIComponent (e.lineno.toString()))+'&UA ='+ unscape(encodeURIComponent(userAgent));

サーバー構成(.htaccess)
前の例と同じように、.htaccessにいくつかのルールを追加して、ピクセルがロードされたことを検出し、PHPファイルを実行します。

 RewriteCond%{REQUEST_URI} TransparentPixelGooglebotError.gif
RewriteRule TransparentPixelGooglebotError.gif(。*)$ https://modelode.com/GooglebotErrorRenderJS.php$1

そうすれば、「https://www.mecagoenlos.com/TransparentPixelGooglebotError.gif」が要求されるたびに、「GooglebotErrorRenderJS.php」PHPファイルが実行されます。
PHPファイル
このPHPファイルは、Googlebotが本物かどうかを確認し、「ErrorsGoogleRender」カテゴリのイベントを使用して、レンダリングされたURLをイベントアクションとして使用し、エラー自体をイベントラベルとして使用して、データをGoogleAnalyticsに送信します。

 <?php

header( "Pragma-directive:no-cache");
header( "Cache-directive:no-cache");
header( "Cache-control:no-cache");
header( "プラグマ:キャッシュなし");
header( "Expires:0");
if($ _GET ["OriginUrl"])
    $ src = $ _ GET ["OriginUrl"];
そうしないと
    $ src = $ _SERVER ['HTTP_REFERER']; 
$ UA = $ _ SERVER ["HTTP_USER_AGENT"]; 
$ RenderParameters = $ _ GET ["RenderParameters"];
$ textError = $ _ GET ["textError"];
$ lineError = $ _ GET ["LineError"];
関数GoogleCheker($ Ip){

    #不必要なルックアップを回避するために、UAが次のいずれかに一致するかどうかのみを確認してください
    #私たちが好きなボット
    
        $ hostname = gethostbyaddr($ Ip);    
        $ ip_by_hostname = gethostbyname($ hostname);   
        if(preg_match( "/ googlebot / i"、$ hostname))
        if($ ip_by_hostname == $ Ip)
            trueを返します。
        そうしないと
                falseを返します。
        
        そうしないと
                falseを返します。
        
        
}
関数GoogleChekerExtend($ Ip){

    #不必要なルックアップを回避するために、UAが次のいずれかに一致するかどうかのみを確認してください
    #私たちが好きなボット
    
        $ hostname = gethostbyaddr($ Ip);    
        $ ip_by_hostname = gethostbyname($ hostname);   
        if(preg_match("/\.google\.com[\.]?$/i",$hostname))
        if($ ip_by_hostname == $ Ip)
            trueを返します。
        そうしないと
                falseを返します。
        
        そうしないと
                falseを返します。
        
        
}
$ botname = "Init";
$ bots = array('Mediapartners-Google [/]([0-9。] {1,10})' =>'Google Mediapartners'、
    'Mediapartners-Google' =>'Google Mediapartners'、
    'Googl(e | ebot)(-Image)/([0-9。] {1,10})' =>'Google画像'、
    'Googl(e | ebot)(-Image)/' =>'Google画像'、
    '^ gsa-crawler' =>'Google'、
    'Googl(e | ebot)(-Sitemaps)/([0-9。] {1,10})?' =>'Google-サイ​​トマップ'、
    'GSiteCrawler [/ v] *([0-9.az] {1,10})?' =>'Google-サイ​​トマップ'、
    'Googl(e | ebot)(-Sitemaps)' =>'Google-Sitemaps'、
    'Mobile。*Googlebot'=>'Google-Mobile'、
    '^ AdsBot-Google' =>'Google-AdsBot'、
    '^ Feedfetcher-Google' =>'Google-Feedfetcher'、
    '互換性; Googleデスクトップ'=>'Googleデスクトップ'、
    'Googlebot' =>'Googlebot');

foreach($ bots as $ pattern => $ bot){
if(preg_match('#'。$pattern。'#i'、$ UA)== 1)
{{
    $ botname = preg_replace( "/ \\ s {1、} / i"、'-'、$ bot);
    壊す;
}
}

if(GoogleCheker($ _ SERVER ['REMOTE_ADDR']))
    $ isGoogle = "Real";
elseif(GoogleChekerExtend($ _ SERVER ['REMOTE_ADDR']))
        $ isGoogle = "Extend";
    そうしないと
        $ isGoogle = "Fake";

クラスBotTracker{
    
    静的関数track($ s、$ params){
        
        
            
            $ bot = "";
            
            $ data = array( 
                'v' => 1、 
                'tid' =>'UA-XXXX-1'、
                'cid' => self :: generate_uuid()、 
                't' =>'イベント'、
                'dh' => $ s ['HTTP_HOST']、 
                'dl' => $ s ['REQUEST_URI']、 
                'dr' => $ s ['HTTP_REFERER']、	
                'dp' => $ s ['REQUEST_URI']、 
                'dt' => $ params ['page_title']、 
                'ck' => $ s ['HTTP_USER_AGENT']、 
                'uip' => $ s ['REMOTE_ADDR']、
                'ni' => 1、
                'ec' =>'ErrorsGoogleRender'、
                'el' => $ params['textError']。"(line:"。$ params ['lineError']。")-"。$params['UA']。"-"。$params['botname' ]。"-"。$params['isGoogle']。"-ip:"。$ s ['REMOTE_ADDR']、//テスト後に削除
                //'el' => $params['UA']。"-"。$params["RenderParameters"]。"-"。$params['botname']。"-"。$params['isGoogle'] 、
                'ea' => $ params ['RenderedURL']
            );
            
            $ url ='http://www.google-analytics.com/collect';
            $ content = http_build_query($ data); 
    
            $ ch = curl_init();
            curl_setopt($ ch、CURLOPT_USERAGENT、$ s ['HTTP_USER_AGENT']);
            curl_setopt($ ch、CURLOPT_URL、$ url);
            curl_setopt($ ch、CURLOPT_RETURNTRANSFER、1);
            curl_setopt($ ch、CURLOPT_CONNECTTIMEOUT、0);
            curl_setopt($ ch、CURLOPT_CONNECTTIMEOUT_MS、0);
            curl_setopt($ ch、CURLOPT_TIMEOUT_MS、0);
            curl_setopt($ ch、CURLOPT_HTTPHEADER、array('Content-type:application / x-www-form-urlencoded'));
            curl_setopt($ ch、CURLOPT_HTTP_VERSION、CURL_HTTP_VERSION_1_1);
            curl_setopt($ ch、CURLOPT_POST、1);
            curl_setopt($ ch、CURLOPT_ENCODING、 "gzip");
            curl_setopt($ ch、CURLOPT_POSTFIELDS、$ content);
            $ result = curl_exec($ ch);
            $ info = curl_getinfo($ ch);
            curl_close($ ch);
        }
        静的プライベート関数generate_uuid(){
        
        return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x'、
            mt_rand(0、0xffff)、mt_rand(0、0xffff)、
            mt_rand(0、0xffff)、
            mt_rand(0、0x0fff)| 0x4000、
            mt_rand(0、0x3fff)| 0x8000、
            mt_rand(0、0xffff)、mt_rand(0、0xffff)、mt_rand(0、0xffff)
        );
    }
    
    
    
    
    
}
 BotTracker :: track($ _ SERVER、array( "page_title" => "VirtualRenderTitle"、 "RenderedURL" => $ src、 "isGoogle" => $ isGoogle、 "botname" => $ botname、 "UA" => $ UA 、"RenderParameters" => $ RenderParameters、 "textError" => $ textError、 "lineError" => $ lineError));

?>

これで、GoogleがURLをレンダリングしようとしたときに発生しているJavascriptエラーを確認できます。

PHPファイルからGoogleAnalyticsにデータを送信します
この実装により、GoogleがURLをレンダリングしようとしたときに生成されている特定のJavascriptエラーと、それらが発生している特定のURLを確認できます。

Googlebotが何らかのインタラクション(スクロール、クリック、その他のJavascriptイベントなど)を試行しているかどうかを確認するなど、Googleのレンダリングプロセスに関して追跡する他の多くの情報を念頭に置いていますが、それは別の投稿に残しておきます。 あなたがそれを好きだったらいいのに!