نظریه نسبیت گوگل‌بات

تصویر سه‌بعدی مفهومی از گوگل‌بات، ساعت داخلی رندر، کد جاوااسکریپت، زمان انتظار شبکه، کش منابع و مراحل خزش، رندر و ایندکس صفحه

تا حالا فکر کردید وقتی گوگل صفحه‌ی جاوااسکریپتی سایت شما رو «می‌بینه»، دقیقاً چقدر زمان صرف اجرا و رندرش می‌کنه؟ جوابش به‌قدری عجیبه که یکی از توسعه‌دهنده‌های حوزه سئوی فنی (که برای فروشگاه‌های بیگ‌کامرس افزونه می‌سازه) چند سال روش تحقیق کرده و به یه سری نتیجه‌گیری غیرمنتظره رسیده — نتیجه‌گیری‌هایی که بعداً توسط سایت خبری معتبر Search Engine Roundtable هم پوشش داده شد.

توی این مقاله، این یافته‌های تجربی رو با زبون ساده بررسی می‌کنیم و می‌بینیم چه معنای عملی‌ای برای سئوی فنی سایت شما دارن.

چرا اصلاً باید به «زمان» از دید گوگل‌بات اهمیت بدیم؟

همه می‌دونیم گوگل صفحات جاوااسکریپتی رو کراول، رندر و بعد ایندکس می‌کنه. اما یه سوال کمتر پرسیده‌شده اینه: گوگل‌بات دقیقاً چقدر صبر می‌کنه تا محتوای دینامیک صفحه بارگذاری بشه، و این «صبر کردن» چطور اندازه‌گیری می‌شه؟

یه محقق حوزه سئوی فنی، برای حل یه مشکل قدیمی (یه ویجت جاوااسکریپتی نظرات که دیتای ساختاریافته‌اش توسط گوگل دیده نمی‌شد)، شروع کرد به لاگ‌گیری دقیق از رفتار Googlebot با استفاده از یه اسکریپت ساده که زمان دقیق هر رویداد (لود شدن منابع، اجرای کد و غیره) رو داخل خود HTML رندرشده ثبت می‌کرد. نتیجه‌ی این آزمایش‌ها، یه سری کشف عجیب و در عین حال کاربردی بود.

اعداد تصادفی که اصلاً تصادفی نیستند

اولین کشف جالب: وقتی این محقق تابع Math.random() رو توی صفحه صدا زد و نتیجه رو لاگ گرفت، متوجه شد گوگل‌بات همیشه دقیقاً همون اعداد «تصادفی» رو تولید می‌کنه — در بازدیدهای مختلف، در روزهای مختلف، حتی با ابزارهای تست مختلف گوگل (مثل URL Inspection و Rich Result Test).

این یعنی گوگل‌بات از یه دانه تصادفی ثابت (Fixed Random Seed) استفاده می‌کنه. دلیلش هم منطقیه: گوگل نمی‌خواد محتوای صفحه هر بار که کراولش می‌کنه به‌طور تصادفی عوض بشه — چون این باعث می‌شه مقایسه و ایندکس محتوا برای گوگل غیرقابل‌اعتماد بشه.

نکته عملی: اگه سایت شما از Math.random() برای تصمیم‌گیری درباره محتوا (مثلاً نمایش تصادفی یه پیشنهاد یا بنر) استفاده می‌کنه، بدونید که گوگل همیشه دقیقاً همون نسخه رو می‌بینه، نه یه نمونه تصادفی واقعی.

بودجه زمانی رندر: «ساعت داخلی» گوگل‌بات چطور کار می‌کنه؟

اینجا جالب‌ترین بخش ماجراست. با اندازه‌گیری دقیق performance.now() در لحظه‌ی گرفتن اسنپ‌شات نهایی از HTML، این محقق متوجه شد گوگل‌بات معمولاً دور و بر ۵ تا ۵.۵ ثانیه‌ی «زمان داخلی» اسنپ‌شات نهایی رو می‌گیره. اما نکته عجیب اینجاست: این ۵ ثانیه، زمان واقعی نیست — یه ساعت داخلی مخصوص خود گوگل‌باته.

وقتی گوگل‌بات صبر می‌کند، زمان می‌ایستد

آزمایش‌های بعدی نشون داد این «ساعت داخلی» یه رفتار عجیب داره: هر وقت گوگل‌بات منتظر پاسخ یه منبع شبکه‌ای (مثل یه API یا فایل جاوااسکریپت) بمونه، ساعتش عملاً متوقف می‌شه. یعنی اگه یه درخواست شبکه‌ای ۵ ثانیه‌ی واقعی طول بکشه، از دید گوگل‌بات فقط چند میلی‌ثانیه گذشته.

نتیجه؟ صفحه‌ای که چندین درخواست شبکه‌ای پشت سر هم داره (نه هم‌زمان)، می‌تونه ده‌ها ثانیه‌ی واقعی فرصت داشته باشه تا محتواش کامل بشه، چون گوگل‌بات در طول انتظار برای شبکه، اون رو جزو «۵ ثانیه‌ی مجازش» حساب نمی‌کنه.

چقدر می‌شه گوگل‌بات را منتظر نگه داشت؟

البته این صبر بی‌نهایت نیست. آزمایش‌ها نشون داد وقتی صفحه با یه زنجیره از درخواست‌های شبکه‌ای پشت‌سرهم به حدود ۵۰ تا ۵۲ ثانیه‌ی زمان واقعی می‌رسه، گوگل‌بات همه‌ی درخواست‌های شبکه‌ای باقی‌مونده رو لغو می‌کنه و مستقیم می‌ره سراغ رسیدن به هدف ۵ ثانیه‌ی داخلیش و گرفتن اسنپ‌شات نهایی — یعنی هر محتوایی که تا اون لحظه لود نشده باشه، اصلاً دیده نمی‌شه.

نکته عملی: اگه سایت شما به یه زنجیره طولانی از درخواست‌های شبکه‌ای پشت‌سرهم (نه موازی) برای نمایش محتوای اصلی وابسته‌ست، این محتوا ممکنه اصلاً توسط گوگل دیده نشه. بهتره درخواست‌های حیاتی رو به‌صورت موازی (Parallel) بفرستید، نه زنجیره‌ای (Sequential).

کش‌سازی منابع: ۳۰ روز، فارغ از هدرهای کش شما

این بخش شاید مهم‌ترین یافته از نظر تاثیر عملیه. طبق تاییدیه رسمی خود گوگل در بلاگ Search Central، سیستم رندر گوگل (Web Rendering Service یا WRS) برای صرفه‌جویی در بودجه خزش، منابع جاوااسکریپت و CSS رو مستقل از هدرهای کش HTTP سایت شما کش می‌کنه؛ این کش تا ۳۰ روز معتبر می‌مونه.

یعنی حتی اگه شما هدر Cache-Control: no-cache روی فایل جاوااسکریپتتون گذاشته باشید، گوگل‌بات ممکنه همچنان نسخه‌ی قدیمی (تا ۳۰ روز پیش) رو ازش استفاده کنه.

نکته عملی: اگه یه آپدیت مهم روی فایل‌های جاوااسکریپت یا CSS سایتتون دادید (مخصوصاً چیزی که روی محتوای قابل‌ایندکس اثر می‌ذاره)، به‌جای تکیه به هدرهای کش، از URL نسخه‌دار (Cache Busting) استفاده کنید — مثلاً style.css?v=2 — تا مطمئن بشید گوگل‌بات نسخه‌ی جدید رو می‌بینه.

فاصله بین خزش و رندر

طبق مستندات رسمی گوگل، فرآیند نمایه‌سازی صفحات جاوااسکریپتی سه مرحله داره: خزش (Crawling)، رندر (Rendering) و ایندکس‌شدن (Indexing). گوگل معمولاً می‌گه این فاصله «معمولاً کوتاهه»، اما آزمایش‌های این محقق نمونه‌هایی رو ثبت کرده که فاصله بین دریافت HTML اولیه و شروع رندر واقعی صفحه، به بیش از ۲۰ ثانیه هم رسیده. این یعنی برای صفحات جدید یا کم‌اهمیت‌تر، این فاصله می‌تونه محسوس‌تر از چیزی باشه که تصور می‌کنیم.

گوگل‌بات اسکرول نمی‌کند؛ مشکل بخش‌های تمام‌صفحه (Full-Height Hero)

یه نکته کمتر شناخته‌شده: گوگل‌بات هیچ‌وقت واقعاً صفحه رو اسکرول نمی‌کنه (رویداد Scroll هیچ‌وقت فایر نمی‌شه). به‌جاش، برای دیدن محتوایی که پایین‌تر از صفحه‌ی اولیه‌ست، از یه رویداد Resize استفاده می‌کنه که ویوپورت رو خیلی بلندتر از حد معمول (گاهی حتی بیش از یک میلیون پیکسل!) شبیه‌سازی می‌کنه تا محتوای Lazy-load یا وابسته به اسکرول هم لود بشه.

اینجاست که یه مشکل جالب پیش میاد: اگه توی سایتتون از سکشن‌های هیرو با ارتفاع 100vh (تمام ارتفاع صفحه) استفاده می‌کنید، چون ویوپورت گوگل‌بات خیلی بلندتر از یه صفحه‌نمایش معمولیه، این تصویر هیرو می‌تونه توی پیش‌نمایش‌های ابزارهای گوگل بیش‌ازحد کشیده و عجیب دیده بشه. طبق تاییدیه مارتین اسپلیت (یکی دیگه از سخنگوهای رسمی تیم Search گوگل)، این موضوع مشکل رتبه‌بندی یا دیدن محتوا توسط گوگل ایجاد نمی‌کنه، اما توصیه می‌کنه برای این سکشن‌ها یه max-height مشخص تعریف کنید تا این رفتار عجیب رو محدود کنید.

جمع‌بندی عملی: این یافته‌ها چه تاثیری روی سایت شما دارند؟

خلاصه‌ی نکات عملی که از این تحقیق تجربی می‌تونید برای سئوی فنی سایتتون استفاده کنید:

  • درخواست‌های شبکه‌ای حیاتی رو موازی بفرستید، نه زنجیره‌ای — تا محتوای اصلی صفحه در محدوده زمانی که گوگل‌بات واقعاً حساب می‌کنه، لود بشه.
  • برای آپدیت‌های مهم جاوااسکریپت/CSS از Cache Busting استفاده کنید — چون کش ۳۰روزه‌ی WRS مستقل از هدرهای کش شماست.
  • منابع غیرضروری (فونت، تبلیغات، ردیاب‌ها) رو توی robots.txt مسدود کنید اگه لازم نیستن — این باعث می‌شه گوگل‌بات وقت و بودجه‌اش رو صرف محتوای مهم‌تر کنه.
  • برای سکشن‌های هیرو تمام‌صفحه، max-height تعریف کنید تا از رفتار عجیب پیش‌نمایش گوگل جلوگیری بشه.
  • اگه سایت شما (یا یه صفحه مهم) به‌تازگی منتشر شده، صبور باشید — فاصله‌ی بین خزش و رندر واقعی می‌تونه بیشتر از حد انتظار طول بکشه؛ این طبیعیه، نه لزوماً نشونه یه مشکل.
  • برای درک عمیق‌تر این موضوعات، آشنایی با مفهوم بودجه خزش (Crawl Budget) هم به شما کمک می‌کنه تصویر کامل‌تری از نحوه تعامل گوگل‌بات با سایتتون داشته باشید.
mehdisabet وب‌سایت
سلام، من محمدمهدی ثابت‌عهد هستم. حدود چهار ساله که در حوزه بازاریابی فعالیت می‌کنم و عاشق دنیای پرهیجان بازاریابی و به خصوص سئو هستم.در این سایت، بیشتر در مورد سئو صحبت خواهیم کرد. هدف من این است که به سئوکاران حرفه‌ای کمک کنم تا دانششان را در این زمینه عمیق‌تر کنند و همچنین به کسب‌وکارها کمک کنم تا درک بهتری از سئو پیدا کنند و بتوانند از آن برای رشد کسب‌وکارشان استفاده کنند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *