كيفية عرض عناوين URL المقدمة من Google في Google Analytics

نشرت: 2021-06-11

بادئ ذي بدء ، شكر خاص لكريستيان لمساعدتي في الترجمة!

لقد مرت عدة سنوات منذ أن بدأت Google في إجراء تحسينات هائلة في قدرتها على الزحف وتحميل المحتوى بجافا سكريبت بنفس الطريقة التي يراها المستخدم الحقيقي بهاتف محمول.

ومع ذلك ، لن تتمكن Google من الزحف إلى جميع عناوين URL التي تجدها حتى إذا حسنت بنيتها التحتية ، لأن تكلفة الزحف والعرض (عملية تحويل مستند HTML إلى بنية مرئية) أكبر بكثير من مجرد الزحف والحصول على HTML لعنوان URL. أقرت Google نفسها بذلك ، لذلك من المهم التأكد من أن Google ستعثر على عناوين URL الأكثر أهمية لموقعنا وتعرضها وتفهرسها ، خاصة في المواقع و / أو المواقع الأكبر حجمًا التي تعتمد على JS التي يتم تنفيذها بواسطة العميل (CSR ، عرض جانب العميل)

منذ سنوات ، من أجل تقييم محتوى عنوان URL وتحديد ما إذا كنت تريد إضافته إلى الفهرس أم لا ، كان لدى Google ما يكفي من الحصول على HTML الخاص بعنوان URL (بالإضافة إلى الصور المرتبطة به). كان HTML هو المحتوى الذي استخدمته Google لفهرسة عنوان URL وترتيبه ، دون مراعاة ما إذا تم تعديل HTML باستخدام Javascript بعد التقديم أم لا.

الآن ، مع ضجيج أطر عمل Javascript التي تعدل جانب عميل HTML ، تحتاج Google إلى الحصول على HTML و JS code وأنماط CSS والموارد الأخرى (مثل الصور والواجهات وما إلى ذلك) من أجل عرض المحتوى والحصول على HTML النهائي ، حتى يتمكن من تحديد ما إذا كان ينتقل إلى الفهرس أم لا.

لا تتم هذه العملية برمتها دفعة واحدة كما يراها المستخدم العادي: تتم في خطوتين. أولاً ، يزحف محرك بحث Google إلى عنوان URL ويحصل على HTML "غير معروض" (كما كان يفعل حتى الآن) ، وبعد فترة (بدون فترة زمنية محددة) ، يحصل على بقية الموارد المشار إليها في HTML ويحاول لعرض الصفحة للحصول على HTML النهائي المعروض. يشار إلى هذه الخطوة الثانية باسم "الموجة الثانية من الفهرسة".

لا نحتاج إلى الكثير من المعرفة التقنية لفهم أنه من أجل الزحف إلى عدد من عناوين URL وفهرستها ، فإن تكلفة عرضها أكبر بكثير من مجرد الحصول على HTML غير معروض ، سواء من حيث الوقت أو الموارد. لذلك ، باستخدام نفس القدر من الموارد المحدودة ، سيكون بمقدور Google الزحف إلى عدد أقل من عناوين URL وفهرستها إذا احتاج إلى عرضها. لهذا السبب تحتاج Google إلى تحديد / إعطاء الأولوية لعناوين URL التي سيتم عرضها وأيها لا يعرض.

من أجل تحديد عنوان URL الذي يجب الزحف إليه بعد ذلك ، تحسب Google احتمالية تغيير عنوان URL هذا منذ آخر مرة تم الزحف إليه ، مع مراعاة العوامل الأخرى مثل PageRank لكل عنوان URL أو ما إذا كان مشرف الموقع قد قام بتكوين أي إعداد محدد بخصوص الزحف تردد. هذا منطقي لأنه من غير المجدي إنفاق موارد محدودة في الزحف إلى شيء لم يتغير.

أود مشاركة هذه المقالة معك لأنني أعتقد أنها ليست معروفة حقًا ويمكن أن تكون كاشفة جدًا لفهم كيف يقرر Google عنوان URL الذي سيتم الزحف إليه بعد ذلك. لقد كتبه مهندسو Google وهو تجريد رياضي لحل مشكلة حقيقية. لا تخف من الصيغ الرياضية ، فهي موضحة تمامًا للأشخاص الذين ليسوا علماء بيانات.

بعد تحديد عنوان URL الذي سيتم الزحف إليه بعد ذلك ، يحتاج Googlebot إلى أن يقرر ، لكل عنوان URL تم الزحف إليه ، ما إذا كان يجب أن يعرض عنوان URL هذا أم لا ، وإذا قرر تقديم عنوان URL ، فسيحتاج إلى جميع الموارد لتحقيق ذلك. من أجل تحديد ما إذا كان يحتاج إلى طلب كل من الموارد المطلوبة ، فمن المحتمل أن يستخدم عملية حسابية مماثلة ولكن مع بعض الاختلافات مثل أوقات التخزين المؤقت ، وتكلفة الحصول على المورد ، وما إلى ذلك.

بسبب كل هذا ، من المهم جدًا معرفة عناوين URL من موقعنا التي يتم الزحف إليها بواسطة Google ، وأيضًا تلك التي يتم عرضها. طريقة سهلة للحصول على هذه المعلومات ، والتي نستخدمها في Funnel ▼ Punk (حيث نعمل مع مواقع الويب الكبيرة) ، تتمثل في تحليل سجلات الخادم (يوجد هنا منشور حول ذلك في مدونتي ، باللغة الإسبانية ، وآخر على مدونة Oncrawl ) ، للحصول على صورة كاملة لما يفعله Googlebot في موقعنا. يمكن أن يكون تحليل السجل مملاً ومكلفًا للعديد من الأشخاص ، ولهذا السبب أود أن أشارككم طريقة لتتبع عناوين URL التي يتم عرضها بواسطة Googlebot في Google Analytics.

[دراسة حالة] إدارة زحف روبوت Google

مع وجود أكثر من 26000 مرجع للمنتج ، احتاج 1001Pneus إلى أداة موثوقة لمراقبة أداء مُحسنات محركات البحث والتأكد من أن Google كانت تخصص ميزانية الزحف الخاصة بها على الفئات والصفحات الصحيحة. تعرف على كيفية إدارة ميزانية الزحف بنجاح لمواقع التجارة الإلكترونية باستخدام OnCrawl.
اقرأ دراسة الحالة

تتبع عناوين URL المقدمة من Google

الطريقة بسيطة نسبيًا ، على الأقل لأي فريق تطوير وأي مشرف موقع يستخدم للعمل مع PHP أو ما شابه ذلك. تتكون من 3 خطوات:

  1. أضف كود جافا سكريبت
    ستكتشف الشفرة متى ينفذ Googlebot جافا سكريبت بنفس الطريقة التي يقوم بها المستخدم العادي ، وسوف يقوم بتحميل صورة باستخدام جافا سكريبت (بكسل شفاف).
  2. تكوين الخادم
    قم بتكوين الخادم لتنفيذ ملف PHP (أو أي لغة برمجة أخرى مستخدمة في الخلفية) عند طلب عنوان URL الخاص بالبكسل الشفاف.
  3. أرسل البيانات إلى Google Analytics
    سيتحقق ملف PHP الخاص بنا مما إذا كان Googlebot هو Googlebot حقًا ، وإذا كان الأمر كذلك ، فسيرسل البيانات إلى Google Analytics.

أضف كود جافا سكريبت
في تجارب مختلفة قمت بتجربتها ، تأكدت من أن Googlebot سوف ينفذ جافا سكريبت فقط عندما لا تحتاج شفرة جافا سكريبت إلى تدخل المستخدم. على سبيل المثال ، سيقوم Googlebot بتنفيذ أي كود جافا سكريبت يتم تشغيله مع أحداث التحميل أو الأحداث الجاهزة. في هذا المثال ، سننشئ وظيفة سيتم تشغيلها مع حدث onLoad ، أي عندما يتم تحميل جميع عناصر الصفحة.

ستتحقق هذه الوظيفة مما إذا كان وكيل المستخدم يحتوي على أي من برامج الروبوت المعروفة لـ Googlebot وإذا كان الأمر كذلك ، فسيتم تحميل صورة (بكسل شفاف) ، والتي سنسميها باسم TransparentPixelGooglebot.gif

 <script>
window.addEventListener ("تحميل" ، الوظيفة () {
    var botPattern = "googlebot | Googlebot-Mobile | Googlebot-Image | Google favicon | Mediapartners-Google" ؛
    var re = RegExp الجديد (botPattern، 'i') ؛
    var userAgent = navigator.userAgent ، 

    إذا (re.test (userAgent)) {
        var client = جديد XMLHttpRequest () ،
        var trackRenderURL = 'https: //www.mecagoenlos.com/TransparentPixelGooglebot.gif؟ OriginUrl =' + window.location.href ؛
        
        client.open ('GET'، trackRenderURL) ؛
        client.setRequestHeader ('نوع المحتوى'، 'نص / عادي؛ charset = UTF-8') ؛
        client.send (فارغ) ؛
    }
}) ؛
</script>
في أي وقت يصل Googlebot إلى Javascript وينفذها ، سيتم تشغيل وظيفتنا ، وتحميل صورة "TransparentPixelGooglebot.gif" ، وإضافة بعض المعلمات إلى عنوان URL للصورة حيث سنحدد عنوان URL المحدد الذي تم الوصول إليه.

في هذا المتغير ، سنقوم بتكوين عنوان URL الكامل المطلوب لتحميل صورة "TransparentPixelGooglebot.gif" الخاصة بنا ، حيث نضيف عنوان URL الذي تم الوصول إليه بالإضافة إلى وكيل المستخدم الذي يطلبه.

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

تكوين الخادم (htaccess.)

خطوتنا التالية هي تكوين خادمنا بحيث في أي وقت يُطلب فيه عنوان URL الخاص بالبكسل (TransparentPixelGooglebot.gif) ، يتم تنفيذ ملف PHP (GooglebotRenderJS.php)

للقيام بذلك ، يتعين علينا إجراء بعض التغييرات في ملف htaccess الخاص بنا (لأننا نستخدم خادم Apache و PHP كلغة برمجة للواجهة الخلفية)

هذان السطران المحددان هما ما سيحقق ذلك:

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

كما يمكنك التخمين ، يتم نشر المعلمات المضمنة في طلب البكسل بحيث يمكن لملف PHP (GooglebotRenderJS.php) "قراءتها".

بيانات عند الزحف³

قم بتوسيع تحليلك بوصلات سلسة لمجموعات بيانات إضافية. قم بتحليل إستراتيجية تحسين محركات البحث (SEO) الخاصة بك بناءً على البيانات الموجودة في الروابط الخلفية ، وحركة تحسين محركات البحث (SEO) ، والتصنيفات ، ومجموعات البيانات المخصصة من CRM أو حل المراقبة أو أي مصدر آخر.
يتعلم أكثر

أرسل البيانات إلى Google Analytics من ملف PHP

في خطوتنا الأخيرة ، أنشأنا ملف PHP (GooglebotRenderJS.php) الذي سيتم تنفيذه في أي وقت يُطلب فيه البكسل (TransparentPixelGooglebot.gif).

هذا الملف سوف:

  1. تحقق ، باستخدام DNS العكسي ، مما إذا كان الطلب قد تم بالفعل بواسطة Googlebot أو Googlebot المزيف باستخدام وكيل مستخدم Googlebot
  2. تحديد نوع البوت (Googlebot للجوال ، الصور ، الإعلانات ، إلخ.)
  3. أرسل البيانات إلى Google Analytics (باستخدام بروتوكول قياس Google Analytics) داخل حدث حيث سنقوم بتعيين المتغيرات التالية:
  • فئة الحدث: "GoogleRenderFromHtaccess"
  • إجراء الحدث: عنوان URL المعروض (مُحيل طلب البكسل)
  • Event Label: سلسلة تربط بين وكيل المستخدم وعنوان IP وما إذا كان الروبوت هو Googlebot حقيقي ("حقيقي") أو مزيف ("مزيف"). أرسل الثلاثة منهم إلى GA لكي أتمكن من معرفة ما إذا كان تعريف Googlebot يعمل بشكل صحيح.
  • * هام: لقد قمت بتخزين عنوان IP لبضعة أيام فقط لاختبار ما إذا كان كل شيء يعمل بشكل صحيح ، وتوقفت عن القيام بذلك بعد ذلك في حالة وجود أي مشكلة في قوانين حماية البيانات
 <؟ php

header ("Pragma-Directive: no-cache") ؛
header ("Cache-Directive: no-cache")؛
header ("Cache-control: no-cache") ؛
header ("Pragma: no-cache") ؛
رأس ("انتهاء الصلاحية: 0") ؛
إذا ($ _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))
        إذا ($ ip_by_hostname == $ Ip)
            العودة صحيح
        آخر
                عودة كاذبة؛
        
        آخر
                عودة كاذبة؛
        
        
}
وظيفة GoogleChekerExtend ($ Ip) {

    # لتجنب البحث غير الضروري ، تحقق فقط مما إذا كان UA يطابق أحد ملفات
    # الروبوتات التي نحبها
    
        $ hostname = gethostbyaddr ($ Ip) ؛    
        $ ip_by_hostname = gethostbyname ($ hostname) ؛   
        if (preg_match ("/ \. google \ .com [\.]؟ $ / i"، $ hostname))
        إذا ($ ip_by_hostname == $ Ip)
            العودة صحيح
        آخر
                عودة كاذبة؛
        
        آخر
                عودة كاذبة؛
        
        
}
$ botname = "التهيئة"؛
$ bots = array ('Mediapartners-Google [/]([0-9.]{1،10})' => 'Google Mediapartners'،
    "Mediapartners-Google" => "Google Mediapartners" ،
    'Googl (e | ebot) (- صورة) / ([0-9.] {1،10})' => 'Google Image'،
    'Googl (e | ebot) (- صورة) /' => 'صور Google' ،
    '^ gsa-crawler' => 'Google'،
    "Googl (e | ebot) (- ملفات Sitemap) / ([0-9.] {1،10})؟" => "خرائط مواقع Google" ،
    "GSiteCrawler [/v]*([0-9.az]{1،10})؟ ' => "خرائط مواقع Google" ،
    'Googl (e | ebot) (- خرائط المواقع)' => "خرائط مواقع Google" ،
    "Mobile. * Googlebot" => "Google-Mobile" ،
    '^ AdsBot-Google' => 'Google-AdsBot' ،
    '^ Feedfetcher-Google' => 'Google-Feedfetcher' ،
    'متوافق؛ Google Desktop '=> "Google Desktop" ،
    'Googlebot' => 'Googlebot') ؛

foreach ($ bots as $ pattern => $ bot) {
if (preg_match ('#'. $ pattern. '# i'، $ UA) == 1)
{
    $ botname = preg_replace ("/ \\ s {1،} / i"، '-'، $ bot)؛
    فترة راحة؛
}
}

إذا (GoogleCheker ($ _ SERVER ['REMOTE_ADDR']))
    $ isGoogle = "حقيقي" ؛
elseif (GoogleChekerExtend ($ _ SERVER ['REMOTE_ADDR']))
        $ isGoogle = "تمديد" ؛
    آخر
        $ isGoogle = "مزيف" ؛

فئة BotTracker {
    
    مسار دالة ثابتة ($ s، $ params) {
        
        
            
            $ bot = ""؛
            
            بيانات دولار = مصفوفة ( 
                'v' => 1 ، 
                "tid" => "UA-XXXXXXX-1" ،
                'cid' => self :: create_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'؛
            المحتوى $ = 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، صفيف ('نوع المحتوى: 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) ؛
            نتيجة $ = curl_exec ($ ch) ؛
            $ info = curl_getinfo ($ ch) ؛
            curl_close ($ ch) ؛
        }
        دالة خاصة ثابتة create_uuid () {
        
        عودة 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))؛

؟>

تحقق مما إذا كان إعدادنا يعمل في Google Analytics

تم إعداد كل شيء! يمكننا الآن التحقق مما إذا كان كل شيء يعمل كما هو متوقع. للقيام بذلك ، يمكننا استخدام تقرير الوقت الفعلي من Google Analytics وتحديد تقرير "الأحداث". في علامة تبويب أخرى ، نفتح Search Console ، وانتقل إلى موقع الويب الخاص بنا واستخدم URL Inspector لإجبار Google على الزحف إلى أي من عناوين URL الخاصة بنا وعرضها. إذا كان كل شيء يعمل ، فسترى أحداثًا جديدة في تقرير أحداث الوقت الفعلي لبرنامج Google Analytics.

كما سترى ، لن يتم احتساب هذه الأحداث كمستخدمين نشطين في موقعنا ، لأنه تم تكوين الحدث باستخدام معلمة "nonInteraction".

إذا نقرنا على فئة الحدث "GoogleRenderFromHtaccess" ، فسنكون قادرين على رؤية وكيل المستخدم وعنوان IP وإذا تم تحديد الروبوت على أنه حقيقي أو مزيف.

تتبع الأخطاء التي أنشأتها Google أثناء محاولتها عرض عنوان URL

لقد رأينا بالفعل كيف يمكننا تتبع والتحقق من عناوين URL التي يتم عرضها بواسطة Google. ولكن يمكننا المضي قدمًا وتتبع أخطاء جافا سكريبت التي يتم إنشاؤها عندما تحاول Google عرض عناوين URL الخاصة بموقعنا.

عندما يتم تقديم Javascript ، يمكن إنشاء أخطاء تظهر فقط على متصفح المستخدم (وليس على الخادم الخاص بنا) ، لذا فإن تتبع هذه الأخطاء ليس بالمهمة السهلة.

في الوقت الحاضر ، إذا أردنا التحقق من أخطاء جافا سكريبت التي يتم إنشاؤها عندما يعرض Googlebot عناوين URL الخاصة بنا ، فلا يمكننا القيام بذلك إلا باستخدام أداة فحص عناوين URL في Search Console

  1. افحص عنوان URL:
  2. انقر فوق "اختبار عنوان URL المباشر":
  3. تحقق من وجود أي أخطاء:

إن القيام بذلك يدويًا للعديد من عناوين URL يتطلب الكثير من العمل ، ولكن يمكننا استخدام الكود الذي عرضته لك للتو لتتبع ما إذا كانت هناك أية أخطاء في جافا سكريبت عندما يحاول Googlebot عرض عناوين URL الخاصة بنا.

مثال على خطأ تم إنشاؤه عمدًا للتحقق مما إذا كان الرمز يعمل:

أضف كود جافا سكريبت
بالطريقة نفسها التي فعلناها في المثال السابق ، سنلتقط أي خطأ جافا سكريبت باستخدام سطر التعليمات البرمجية هذا: "window.addEventListener('error', function(e)" .

في أي وقت يتم إنشاء خطأ ، سيتم تنفيذ وظيفة تسمح لنا بحفظ هذه الأخطاء وإرسالها إلى Google Analytics. سيكون هذا مشابهًا جدًا لما فعلناه في المثال السابق مع التنبيه بأن هذه الوظيفة لن يتم تنفيذها إلا عند وجود خطأ جافا سكريبت.

 window.addEventListener ('خطأ' ، الوظيفة (هـ) {
        var botPattern = "googlebot | Googlebot-Mobile | Googlebot-Image | Google favicon | Mediapartners-Google" ؛
        var re = RegExp الجديد (botPattern، 'i') ؛
        var userAgent = navigator.userAgent ، 
        إذا (re.test (userAgent)) {
            var client = جديد XMLHttpRequest () ،
            var ErrorsURLPixel = 'https: //www.mecagoenlos.com/TransparentPixelGooglebotError.gif؟ OriginUrl =' + window.location.href + '& textError =' + unescape (encodeURIComponent (e.message)) + '& LineError =' + unesompon (encode) (e.lineno.toString ())) + '& UA =' + unescape (encodeURIComponent (userAgent)) ؛
        
            client.open ('GET' ، ErrorsURLPixel) ؛
            client.setRequestHeader ('نوع المحتوى'، 'نص / عادي؛ charset = UTF-8') ؛
            client.send (البريد) ؛
        }
    }) ؛

سيؤدي هذا الرمز إلى تنفيذ الوظيفة التي ستحمّل بكسلًا شفافًا آخر (TransparentPixelGooglebotError.gif) ، مضيفًا كمعلمات عنوان URL الذي يتم تقديمه والخطأ ووكيل المستخدم ، مما يؤدي إلى إنشاء طلب إلى عنوان URL مثل هذا:

 var ErrorsURLPixel = 'https: //www.mecagoenlos.com/TransparentPixelGooglebotError.gif؟ OriginUrl =' + window.location.href + '& textError =' + unescape (encodeURIComponent (e.message)) + '& LineError =' + unesompon (encode) (e.lineno.toString ())) + '& UA =' + unescape (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" ، سيتم تنفيذ ملف PHP "GooglebotErrorRenderJS.php".
ملف PHP
سيتحقق ملف PHP هذا مما إذا كان Googlebot حقيقيًا ويرسل البيانات إلى Google Analytics باستخدام حدث مع فئة "ErrorsGoogleRender" ، باستخدام عنوان URL المعروض باعتباره إجراء الحدث والخطأ نفسه كتسمية للحدث.

 <؟ php

header ("Pragma-Directive: no-cache") ؛
header ("Cache-Directive: no-cache")؛
header ("Cache-control: no-cache") ؛
header ("Pragma: no-cache") ؛
رأس ("انتهاء الصلاحية: 0") ؛
إذا ($ _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))
        إذا ($ ip_by_hostname == $ Ip)
            العودة صحيح
        آخر
                عودة كاذبة؛
        
        آخر
                عودة كاذبة؛
        
        
}
وظيفة GoogleChekerExtend ($ Ip) {

    # لتجنب البحث غير الضروري ، تحقق فقط مما إذا كان UA يطابق أحد ملفات
    # الروبوتات التي نحبها
    
        $ hostname = gethostbyaddr ($ Ip) ؛    
        $ ip_by_hostname = gethostbyname ($ hostname) ؛   
        if (preg_match ("/ \. google \ .com [\.]؟ $ / i"، $ hostname))
        إذا ($ ip_by_hostname == $ Ip)
            العودة صحيح
        آخر
                عودة كاذبة؛
        
        آخر
                عودة كاذبة؛
        
        
}
$ botname = "التهيئة"؛
$ bots = array ('Mediapartners-Google [/]([0-9.]{1،10})' => 'Google Mediapartners'،
    "Mediapartners-Google" => "Google Mediapartners" ،
    'Googl (e | ebot) (- صورة) / ([0-9.] {1،10})' => 'Google Image'،
    'Googl (e | ebot) (- صورة) /' => 'صور Google' ،
    '^ gsa-crawler' => 'Google'،
    "Googl (e | ebot) (- ملفات Sitemap) / ([0-9.] {1،10})؟" => "خرائط مواقع Google" ،
    "GSiteCrawler [/v]*([0-9.az]{1،10})؟ ' => "خرائط مواقع Google" ،
    'Googl (e | ebot) (- خرائط المواقع)' => "خرائط مواقع Google" ،
    "Mobile. * Googlebot" => "Google-Mobile" ،
    '^ AdsBot-Google' => 'Google-AdsBot' ،
    '^ Feedfetcher-Google' => 'Google-Feedfetcher' ،
    'متوافق؛ Google Desktop '=> "Google Desktop" ،
    'Googlebot' => 'Googlebot') ؛

foreach ($ bots as $ pattern => $ bot) {
if (preg_match ('#'. $ pattern. '# i'، $ UA) == 1)
{
    $ botname = preg_replace ("/ \\ s {1،} / i"، '-'، $ bot)؛
    فترة راحة؛
}
}

إذا (GoogleCheker ($ _ SERVER ['REMOTE_ADDR']))
    $ isGoogle = "حقيقي" ؛
elseif (GoogleChekerExtend ($ _ SERVER ['REMOTE_ADDR']))
        $ isGoogle = "تمديد" ؛
    آخر
        $ isGoogle = "مزيف" ؛

فئة BotTracker {
    
    مسار دالة ثابتة ($ s، $ params) {
        
        
            
            $ bot = ""؛
            
            بيانات دولار = مصفوفة ( 
                'v' => 1 ، 
                "tid" => "UA-XXXX-1" ،
                'cid' => self :: create_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']. "(السطر:". $ 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'؛
            المحتوى $ = 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، صفيف ('نوع المحتوى: 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) ؛
            نتيجة $ = curl_exec ($ ch) ؛
            $ info = curl_getinfo ($ ch) ؛
            curl_close ($ ch) ؛
        }
        دالة خاصة ثابتة create_uuid () {
        
        عودة 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 الخاصة بنا.

أرسل البيانات إلى Google Analytics من ملف PHP الخاص بنا
من خلال هذا التنفيذ ، يمكننا معرفة أخطاء جافا سكريبت المحددة التي يتم إنشاؤها عندما تحاول Google عرض عناوين URL الخاصة بنا ، وفي أي عناوين URL محددة تحدث.

أفكر في الكثير من المعلومات الأخرى التي يجب تتبعها فيما يتعلق بعملية عرض Google ، مثل التحقق مما إذا كان Googlebot يحاول بعض التفاعلات (مثل التمرير أو النقر أو أي حدث جافا سكريبت آخر) ، لكنني سأحتفظ بذلك في منشور آخر. اتمنى انك احببتها!