Cara melihat URL yang diberikan oleh Google di Google Analytics

Diterbitkan: 2021-06-11

Pertama-tama, terima kasih khusus kepada Christian karena telah membantu saya menerjemahkan!

Sudah beberapa tahun sejak Google mulai membuat peningkatan besar dalam kapasitasnya untuk merayapi dan memuat konten dengan Javascript dengan cara yang sama seperti yang dilihat oleh pengguna nyata dengan ponsel.

Namun demikian, Google tidak akan dapat merayapi semua URL yang ditemukannya meskipun telah meningkatkan infrastrukturnya, karena biaya perayapan dan perenderan (proses mengubah dokumen HTML dalam struktur visual) jauh lebih besar daripada sekadar perayapan dan HTML dari sebuah URL. Google sendiri mengakui hal ini, jadi penting untuk memastikan Google akan menemukan, merender, dan mengindeks URL terpenting dari situs kami, khususnya di situs yang lebih besar dan/atau situs yang bergantung pada JS yang dijalankan oleh klien (CSR, Rendering Sisi Klien)

Bertahun-tahun yang lalu, untuk menilai konten URL dan memutuskan apakah akan menambahkannya ke indeks atau tidak, Google sudah cukup dengan mendapatkan HTML URL (serta gambar yang ditautkan di sana). HTML itu adalah konten yang digunakan Google untuk mengindeks dan memberi peringkat URL, tanpa memperhitungkan apakah HTML itu dimodifikasi menggunakan Javascript setelah dirender atau tidak.

Sekarang, dengan hype framework Javascript yang memodifikasi sisi klien HTML, Google perlu mendapatkan HTML, kode JS, gaya CSS, dan sumber daya lainnya (seperti gambar, front, dll.) untuk merender konten dan mendapatkan HTML terakhir, sehingga dapat memutuskan apakah akan masuk ke indeks atau tidak.

Seluruh proses ini tidak dilakukan dalam satu batch seperti yang akan dilihat oleh pengguna biasa: ini dilakukan dalam dua langkah. Pertama, Google merayapi URL dan mendapatkan HTML "tidak dirender" (seperti yang telah dilakukan sampai sekarang), dan beberapa saat kemudian (tanpa jumlah waktu yang ditentukan), ia mendapatkan sisa sumber daya yang dirujuk dalam HTML itu dan mencoba untuk merender halaman untuk mendapatkan HTML final yang dirender. Langkah kedua ini disebut sebagai “gelombang kedua pengindeksan”.

Kita tidak perlu memiliki banyak pengetahuan teknis untuk memahami bahwa, untuk merayapi dan mengindeks sejumlah URL, biaya untuk merendernya jauh lebih besar daripada sekadar mendapatkan HTML yang tidak dirender, baik dalam waktu maupun sumber daya. Jadi, dengan menggunakan jumlah sumber daya terbatas yang sama, Google akan dapat merayapi dan mengindeks lebih sedikit URL jika perlu merendernya. Itu sebabnya Google perlu memutuskan/memprioritaskan URL mana yang akan dirender dan mana yang tidak.

Untuk memutuskan URL mana yang harus dirayapi selanjutnya, Google menghitung kemungkinan URL tersebut telah berubah sejak terakhir kali dirayapi, dengan mempertimbangkan faktor lain sebagai PageRank dari setiap URL atau jika webmaster telah mengonfigurasi pengaturan khusus apa pun terkait perayapan frekuensi. Ini masuk akal karena tidak ada gunanya menghabiskan sumber daya yang terbatas untuk merayapi sesuatu yang tidak berubah.

Saya ingin berbagi artikel ini dengan Anda karena menurut saya artikel ini tidak terlalu terkenal dan bisa sangat terbuka untuk memahami bagaimana Google memutuskan URL mana yang akan dirayapi selanjutnya. Ini ditulis oleh para insinyur Google dan merupakan abstraksi matematis untuk memecahkan masalah nyata. Jangan takut dengan rumus matematika, ini dijelaskan dengan sempurna untuk orang yang bukan Ilmuwan Data.

Setelah memutuskan URL mana yang akan dirayapi selanjutnya, Googlebot perlu memutuskan, untuk setiap URL yang dirayapi, apakah URL tersebut harus dirender atau tidak, dan jika memutuskan untuk merender URL, Googlebot memerlukan semua sumber daya untuk mencapainya. Untuk memutuskan apakah perlu meminta setiap sumber daya yang dibutuhkan, mungkin menggunakan proses matematika yang sama tetapi dengan beberapa perbedaan seperti waktu cache, biaya untuk mendapatkan sumber daya, dll.

Karena semua ini, sangat penting untuk mengetahui URL mana dari situs kami yang sedang dirayapi oleh Google, dan juga mana yang sedang dirender. Cara mudah untuk mendapatkan informasi itu, yang kami gunakan di Funnel▼Punk (tempat kami bekerja dengan situs web besar), adalah dengan menganalisis log server (berikut adalah posting tentang itu di blog saya, dalam bahasa Spanyol, dan satu lagi di blog Oncrawl ), mendapatkan gambaran lengkap tentang apa yang dilakukan Googlebot di situs kami. Analisis log bisa membosankan dan mahal bagi banyak orang, itulah mengapa saya ingin berbagi dengan Anda cara melacak URL mana yang sedang dirender oleh Googlebot di Google Analytics.

[Studi Kasus] Mengelola perayapan bot Google

Dengan lebih dari 26.000 referensi produk, 1001Pneus membutuhkan alat yang andal untuk memantau kinerja SEO mereka dan memastikan bahwa Google mencurahkan anggaran perayapannya pada kategori dan halaman yang tepat. Pelajari cara berhasil mengelola anggaran perayapan untuk situs web e-niaga dengan OnCrawl.
Baca studi kasus

Melacak URL yang diberikan oleh Google

Metode ini relatif sederhana, setidaknya untuk tim pengembang mana pun dan untuk webmaster mana pun yang pernah bekerja dengan PHP atau yang serupa. Ini memiliki 3 langkah:

  1. Tambahkan kode javascript
    Kode akan mendeteksi ketika Googlebot telah mengeksekusi Javascript dengan cara yang sama seperti yang dilakukan pengguna biasa, dan akan memuat gambar menggunakan Javascript (piksel transparan).
  2. Konfigurasi server
    Konfigurasikan server untuk mengeksekusi file PHP (atau bahasa pemrograman lain yang digunakan di backend) saat URL piksel transparan diminta.
  3. Kirim data ke Google Analytics
    File PHP kami akan memeriksa apakah Googlebot benar-benar Googlebot dan, jika demikian, akan mengirimkan data ke Google Analytics.

Tambahkan kode javascript
Dalam berbagai eksperimen yang saya coba, saya telah memeriksa bahwa Googlebot akan mengeksekusi Javascript hanya ketika kode Javascript tidak memerlukan interaksi pengguna. Misalnya, Googlebot akan mengeksekusi kode Javascript apa pun yang dipicu dengan peristiwa onload atau onready. Dalam contoh ini, kita akan membuat fungsi yang akan dipicu dengan acara onLoad, yaitu ketika semua elemen halaman dimuat.

Fungsi ini akan memeriksa apakah Agen Pengguna berisi salah satu bot Googlebot yang diketahui dan jika demikian, ia akan memuat gambar (piksel transparan), yang akan kami beri nama TransparentPixelGooglebot.gif

 <skrip>
window.addEventListener("memuat", 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 klien = XMLHttpRequest baru();
        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');
        klien.kirim(null);
    }
});
</skrip>
Setiap kali Googlebot mengakses dan menjalankan Javascript, fungsi kami akan dipicu, memuat gambar “TransparentPixelGooglebot.gif”, menambahkan ke URL gambar beberapa parameter di mana kami akan menentukan URL spesifik yang telah diakses.

Dalam variabel ini kita akan menyusun URL lengkap yang akan diminta untuk memuat gambar “TransparentPixelGooglebot.gif” kita, di mana kita menambahkan URL yang diakses serta Agen Pengguna yang memintanya.

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

Konfigurasi server (.htaccess)

Langkah kami selanjutnya adalah mengkonfigurasi server kami sehingga setiap kali URL piksel (TransparentPixelGooglebot.gif) diminta, file PHP dieksekusi (GooglebotRenderJS.php)

Untuk melakukan ini, kita harus melakukan beberapa perubahan pada file .htaccess kita (karena kita menggunakan server Apache dan PHP sebagai bahasa pemrograman backend)

Dua baris khusus ini adalah yang akan mewujudkannya:

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

Seperti yang dapat Anda tebak, parameter yang disertakan dengan permintaan piksel disebarkan sehingga file PHP (GooglebotRenderJS.php) dapat "membacanya".

Data Perayapan³

Perluas analisis Anda dengan koneksi mulus ke kumpulan data tambahan. Analisis strategi SEO Anda berdasarkan data tentang backlink, lalu lintas SEO, peringkat, dan kumpulan data khusus dari CRM Anda, solusi pemantauan, atau sumber lainnya.
Belajarlah lagi

Kirim data ke Google Analytics dari file PHP

Pada langkah terakhir kami, kami membuat file PHP (GooglebotRenderJS.php) yang akan dieksekusi kapan saja piksel (TransparentPixelGooglebot.gif) diminta.

File ini akan:

  1. Periksa, menggunakan DNS terbalik, apakah permintaan itu benar-benar dibuat oleh Googlebot atau Googlebot palsu menggunakan Agen Pengguna Googlebot
  2. Identifikasi jenis bot itu (Googlebot Mobile, Gambar, Iklan, dll.)
  3. Kirim data ke Google Analytics (menggunakan protokol pengukuran Google Analytics) di dalam peristiwa di mana kami akan menetapkan variabel berikut:
  • Kategori Acara: “GoogleRenderFromHtaccess”
  • Tindakan Peristiwa: URL yang Dirender (perujuk permintaan piksel)
  • Label Peristiwa: String yang menggabungkan Agen Pengguna, IP, dan jika bot adalah Googlebot asli (“Real”) atau bot palsu (“Palsu”). Saya mengirim mereka bertiga ke GA agar dapat melihat apakah identifikasi Googlebot berfungsi dengan benar.
  • *Penting: Saya menyimpan IP hanya untuk beberapa hari untuk menguji apakah semuanya bekerja dengan benar, saya berhenti melakukannya setelah itu untuk berjaga-jaga jika ada masalah dengan undang-undang perlindungan data
 <?php

header("Direktif pragma: tanpa cache");
header("Direktif cache: tidak ada cache");
header("Kontrol cache: tanpa cache");
header("Pragma: tanpa cache");
header("Kedaluwarsa: 0");
jika ($_GET["Url Asal"])
    $src=$_GET["Url Asal"];
lain
    $src = $_SERVER['HTTP_REFERER']; 
$UA=$_SERVER["HTTP_USER_AGENT"]; 
$RenderParameters=$_GET["RenderParameters"];
fungsi GoogleCheker($Ip){

    # untuk menghindari pencarian yang tidak perlu, hanya periksa apakah UA cocok dengan salah satu dari
    # bot yang kita suka
    
        $hostname=gethostbyaddr($Ip);    
        $ip_by_hostname=gethostbyname($hostname);   
        if(preg_match("/googlebot/i",$hostname))
        if ($ip_by_hostname == $Ip)
            kembali benar;
        lain
                kembali salah;
        
        lain
                kembali salah;
        
        
}
fungsi GoogleChekerExtend($Ip){

    # untuk menghindari pencarian yang tidak perlu, hanya periksa apakah UA cocok dengan salah satu dari
    # bot yang kita suka
    
        $hostname=gethostbyaddr($Ip);    
        $ip_by_hostname=gethostbyname($hostname);   
        if(preg_match("/\.google\.com[\.]?$/i",$hostname))
        if ($ip_by_hostname == $Ip)
            kembali benar;
        lain
                kembali salah;
        
        lain
                kembali salah;
        
        
}
$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 Gambar',
    'Googl(e|ebot)(-Image)/' => 'Google Gambar',
    '^gsa-crawler' => 'Google',
    'Googl(e|ebot)(-Peta Situs)/([0-9.]{1,10})?' => 'Peta Situs Google',
    'GSiteCrawler[ /v]*([0-9.az]{1,10})?' => 'Peta Situs Google',
    'Googl(e|ebot)(-Sitemaps)' => 'Google-Sitemaps',
    'Seluler.*Googlebot' => 'Google-Seluler',
    '^AdsBot-Google' => 'Google-AdsBot',
    '^Feedfetcher-Google' => 'Google-Feedfetcher',
    'kompatibel; Google Desktop' => 'Google Desktop',
    'Googlebot' => 'Googlebot');

foreach( $bots sebagai $pattern => $bot ) {
if ( preg_match( '#'.$pattern.'#i' , $UA) == 1 )
{
    $botname = preg_replace ( "/\\s{1,}/i" , '-' , $bot );
    merusak;
}
}

jika(GoogleCheker($_SERVER['REMOTE_ADDR']))
    $isGoogle="Nyata";
elseif(GoogleChekerExtend($_SERVER['REMOTE_ADDR']))
        $isGoogle="Perpanjang";
    lain
        $isGoogle="Palsu";

kelas BotTracker {
    
    jalur fungsi statis($s, $params){
        
        
            
            $bot = "";
            
            $data = larik( 
                'v' => 1, 
                'tid' => 'UA-XXXXXXX-1',
                'cid' => self::generate_uuid(), 
                't' => 'acara',
                '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'], //hapus setelah pengujian
                //'el' => $params['UA']." - ".$params["RenderParameters"]." -" .$params['botname']." - ".$params['isGoogle'] ,
                'ea' => $params['RenderedURL']
            );
            
            $url = 'http://www.google-analytics.com/collect';
            $konten = 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, $konten);
            $hasil = curl_exec($ch);
            $info= curl_getinfo($ch);
            curl_close($ch);
        }
        fungsi pribadi statis generate_uuid() {
        
        kembali 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));

?>

Periksa apakah penyiapan kami berfungsi di Google Analytics

Semuanya sudah diatur! Sekarang kita dapat memeriksa apakah semuanya berfungsi seperti yang diharapkan. Untuk melakukan itu, kita dapat menggunakan laporan waktu nyata dari Google Analytics dan memilih laporan "Peristiwa". Di tab lain, kami membuka Search Console, membuka properti situs web kami dan menggunakan Pemeriksa URL untuk memaksa Google merayapi dan merender salah satu URL kami. Jika semuanya berfungsi, Anda akan melihat peristiwa baru di laporan peristiwa waktu nyata Google Analytics.

Seperti yang akan Anda lihat, peristiwa ini tidak akan dihitung sebagai pengguna aktif di situs kami, karena peristiwa tersebut dikonfigurasi dengan parameter "nonInteraction".

Jika kita mengklik kategori event “GoogleRenderFromHtaccess”, kita akan dapat melihat User Agent, IP dan apakah bot telah diidentifikasi sebagai Real atau Fake.

Kesalahan pelacakan yang dibuat oleh Google yang mencoba merender URL

Kami telah melihat bagaimana kami dapat melacak dan memeriksa URL mana yang sedang dirender oleh Google. Tapi kita bisa melangkah lebih jauh dan melacak kesalahan Javascript mana yang dihasilkan saat Google mencoba merender URL situs kita.

Saat Javascript dirender, kesalahan dapat dibuat yang hanya terlihat di browser pengguna (dan bukan di server kami), jadi melacak kesalahan tersebut bukanlah tugas yang mudah.

Saat ini, jika kami ingin memeriksa kesalahan Javascript apa yang dihasilkan saat Googlebot merender URL kami, kami hanya dapat melakukannya menggunakan Pemeriksa URL di Search Console

  1. Periksa URL:
  2. Klik "Uji URL Langsung":
  3. Periksa apakah ada kesalahan:

Melakukan ini secara manual untuk banyak URL membutuhkan banyak pekerjaan, tetapi kita dapat menggunakan kode yang baru saja saya tunjukkan untuk dilacak jika ada kesalahan Javascript saat Googlebot mencoba merender URL kita.

Contoh kesalahan yang dibuat dengan sengaja untuk memeriksa apakah kode berfungsi:

Tambahkan kode Javascript
Cara yang sama yang kita lakukan pada contoh sebelumnya, kita akan menangkap kesalahan Javascript menggunakan baris kode ini: "window.addEventListener('error', function(e)" .

Setiap kali terjadi kesalahan, fungsi yang memungkinkan kami menyimpan kesalahan tersebut dan mengirimkannya ke Google Analytics akan dijalankan. Ini akan sangat mirip dengan apa yang kita lakukan pada contoh sebelumnya dengan peringatan bahwa fungsi ini hanya akan dijalankan ketika ada kesalahan Javascript.

 window.addEventListener('kesalahan', fungsi(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 klien = XMLHttpRequest baru();
            var ErrorsURLPixel='https://www.mecagoenlos.com/TransparentPixelGooglebotError.gif?OriginUrl='+window.location.href+'&textError='+unescape(encodeURIComponent(e.message))+'&LineError='+unescape(encodeURIComponent (e.lineno.toString()))+'&UA='+unescape(encodeURIComponent(userAgent));
        
            client.open('GET',ErrorsURLPixel);
            client.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8');
            klien.kirim(e);
        }
    });

Kode ini akan menjalankan fungsi yang akan memuat piksel transparan lain (TransparentPixelGooglebotError.gif), menambahkan sebagai parameter URL yang dirender, kesalahan dan Agen Pengguna, menghasilkan permintaan ke URL seperti ini:

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

Konfigurasi server (.htaccess)
Cara yang sama seperti pada contoh sebelumnya, kita akan menambahkan beberapa aturan di .htaccess untuk mendeteksi saat piksel dimuat dan mengeksekusi file PHP:

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

Dengan begitu, setiap kali "https://www.mecagoenlos.com/TransparentPixelGooglebotError.gif" diminta, file PHP "GooglebotErrorRenderJS.php" akan dieksekusi.
File PHP
File PHP ini akan memeriksa apakah Googlebot itu nyata dan mengirim data ke Google Analytics menggunakan peristiwa dengan kategori "ErrorsGoogleRender", menggunakan URL yang dirender sebagai Tindakan peristiwa dan kesalahan itu sendiri sebagai label peristiwa.

 <?php

header("Direktif pragma: tanpa cache");
header("Direktif cache: tidak ada cache");
header("Kontrol cache: tanpa cache");
header("Pragma: tanpa cache");
header("Kedaluwarsa: 0");
jika ($_GET["Url Asal"])
    $src=$_GET["Url Asal"];
lain
    $src = $_SERVER['HTTP_REFERER']; 
$UA=$_SERVER["HTTP_USER_AGENT"]; 
$RenderParameters=$_GET["RenderParameters"];
$teksError=$_GET["teksError"];
$lineError=$_GET["LineError"];
fungsi GoogleCheker($Ip){

    # untuk menghindari pencarian yang tidak perlu, hanya periksa apakah UA cocok dengan salah satu dari
    # bot yang kita suka
    
        $hostname=gethostbyaddr($Ip);    
        $ip_by_hostname=gethostbyname($hostname);   
        if(preg_match("/googlebot/i",$hostname))
        if ($ip_by_hostname == $Ip)
            kembali benar;
        lain
                kembali salah;
        
        lain
                kembali salah;
        
        
}
fungsi GoogleChekerExtend($Ip){

    # untuk menghindari pencarian yang tidak perlu, hanya periksa apakah UA cocok dengan salah satu dari
    # bot yang kita suka
    
        $hostname=gethostbyaddr($Ip);    
        $ip_by_hostname=gethostbyname($hostname);   
        if(preg_match("/\.google\.com[\.]?$/i",$hostname))
        if ($ip_by_hostname == $Ip)
            kembali benar;
        lain
                kembali salah;
        
        lain
                kembali salah;
        
        
}
$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 Gambar',
    'Googl(e|ebot)(-Image)/' => 'Google Gambar',
    '^gsa-crawler' => 'Google',
    'Googl(e|ebot)(-Peta Situs)/([0-9.]{1,10})?' => 'Peta Situs Google',
    'GSiteCrawler[ /v]*([0-9.az]{1,10})?' => 'Peta Situs Google',
    'Googl(e|ebot)(-Sitemaps)' => 'Google-Sitemaps',
    'Seluler.*Googlebot' => 'Google-Seluler',
    '^AdsBot-Google' => 'Google-AdsBot',
    '^Feedfetcher-Google' => 'Google-Feedfetcher',
    'kompatibel; Google Desktop' => 'Google Desktop',
    'Googlebot' => 'Googlebot');

foreach( $bots sebagai $pattern => $bot ) {
if ( preg_match( '#'.$pattern.'#i' , $UA) == 1 )
{
    $botname = preg_replace ( "/\\s{1,}/i" , '-' , $bot );
    merusak;
}
}

jika(GoogleCheker($_SERVER['REMOTE_ADDR']))
    $isGoogle="Nyata";
elseif(GoogleChekerExtend($_SERVER['REMOTE_ADDR']))
        $isGoogle="Perpanjang";
    lain
        $isGoogle="Palsu";

kelas BotTracker {
    
    jalur fungsi statis($s, $params){
        
        
            
            $bot = "";
            
            $data = larik( 
                'v' => 1, 
                'tid' => 'UA-XXXX-1',
                'cid' => self::generate_uuid(), 
                't' => 'acara',
                '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' => 'KesalahanGoogleRender',
                'el' => $params['textError']." (baris:".$params['lineError'].") - ".$params['UA']." - " .$params['botname' ]." - ".$params['isGoogle']."- ip: ".$s['REMOTE_ADDR'], //hapus setelah pengujian
                //'el' => $params['UA']." - ".$params["RenderParameters"]." -" .$params['botname']." - ".$params['isGoogle'] ,
                'ea' => $params['RenderedURL']
            );
            
            $url = 'http://www.google-analytics.com/collect';
            $konten = 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, $konten);
            $hasil = curl_exec($ch);
            $info= curl_getinfo($ch);
            curl_close($ch);
        }
        fungsi pribadi statis generate_uuid() {
        
        kembali 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));

?>

Sekarang kita sudah dapat melihat kesalahan Javascript mana yang terjadi ketika Google mencoba merender URL kita.

Kirim data ke Google Analytics dari file PHP kami
Dengan penerapan ini, kita dapat melihat kesalahan Javascript spesifik mana yang dihasilkan saat Google mencoba merender URL kita, dan di URL spesifik mana kesalahan itu terjadi.

Saya memikirkan banyak info lain untuk dilacak terkait proses rendering Google, seperti memeriksa apakah Googlebot mencoba beberapa interaksi (seperti gulir, klik, atau acara Javascript lainnya), tetapi saya akan menyimpannya di pos lain. Semoga Anda menyukainya!