معمای سایتهای جاوااسکریپتی: تجربه کاربری بینظیر، سئوی صفر!
فریمورکهای مدرن جاوااسکریپت مثل React، Vue و Angular دنیای وب را متحول کردهاند. سرعت تعویض صفحات بدون رفرش، انیمیشنهای روان و تجربه شبیه اپلیکیشنهای موبایل باعث شده هر توسعهدهندهای عاشق آنها باشد.
اما یک مشکل بزرگ وجود دارد: وقتی یک وبسایت را به صورت تکصفحهای و کلاینتساید (Client-Side Rendered یا همان CSR) میسازید، در اولین درخواست سرور، تنها چیزی که مرورگر یا خزنده دریافت میکند یک فایل HTML تقریباً خالی شبیه به این است:
<!DOCTYPE html>
<html>
<head><title>سایت من</title></head>
<body>
<div id="root"></div>
<script src="/bundle.js"></script>
</body>
</html>
مرورگر کاربر کدهای جاوااسکریپت را اجرا میکند و در کسری از ثانیه محتوا روی صفحه ظاهر میشود؛ اما رباتهای موتور جستجو چه کار میکنند؟
گوگل چطور صفحات جاوااسکریپتی را بررسی میکند؟ (مفهوم رندر دو مرحلهای)
برخلاف شایعات رایج که میگویند «گوگل جاوااسکریپت را کاملاً میفهمد»، فرآیند خزش سایتهای JS-rendered بسیار پیچیدهتر و پرهزینهتر از سایتهای عادی است:
- مرحله اول (Crawl): ربات HTML اولیه را دانلود میکند. اگر صفحه SPA باشد، در این مرحله محتوایی وجود ندارد، تیتر H1 خالی است و متنی برای خواندن دیده نمیشود.
- مرحله دوم (Render Queue): صفحه به صف سرویس رندر وب گوگل (WRS) فرستاده میشود تا یک مرورگر Headless کرومیوم کدها را اجرا کرده و خروجی را بررسی کند.
مشکل کجاست؟ صف رندر گوگل ممکن است از چند ساعت تا چند هفته طول بکشد! علاوه بر این، ربات گوگل برای اجرای اسکریپتها سقف زمانی (Timeout محدود معمولاً زیر ۵ ثانیه) دارد. اگر فراخوانی API کند باشد یا باگ کلاینتی رخ دهد، خروجی رندر شده سفید میماند و گوگل صفحه را ایندکس نمیکند.
۳ راهکار استاندارد و قطعی برای سئوی سایتهای جاوااسکریپتی
اگر میخواهید پروژههای مدرن وب سئوی بینقصی داشته باشند، باید یکی از این سه مسیر را انتخاب کنید:
۱. رندر سمت سرور (Server-Side Rendering یا SSR)
این بهترین و استانداردترین رویکرد است. به جای ساخت اپلیکیشن با Vite یا CRA ساده، از فریمورکهای SSR استفاده کنید:
- برای اکوسیستم React: Next.js یا Remix
- برای اکوسیستم Vue: Nuxt.js
- برای Angular: Angular Universal
در این حالت، سرور با اولین درخواست کاربر یا ربات، صفحه کامل را با تمام متنها و تگهای سئو به صورت HTML خام آماده تحویل میدهد و سپس جاوااسکریپت آن را در کلاینت هیدراته (Hydrate) میکند.
۲. تولید صفحات ایستا (Static Site Generation یا SSG)
اگر سایت شما وبلاگ، سایت شرکتی یا فروشگاهی با تغییرات محدود است، نیازی به رندر لحظهای نیست. ابزارهایی مثل Next.js SSG یا Astro تمام صفحات را در زمان بیلد (Build Time) به فایلهای HTML سبک و بسیار پرسرعت تبدیل میکنند که بهشت خزندههای گوگل است.
۳. پیشرندرینگ داینامیک (Dynamic Prerendering)
اگر پروژه عظیمی دارید که بازنویسی آن با Next.js در کوتاه مدت ممکن نیست، میتوانید از سرویسهای پیشرندر (مانند Rendertron یا Prerender.io) استفاده کنید. در این روش، وبسرور تشخیص میدهد اگر درخواست از طرف ربات گوگل یا بینگ است، نسخه رندر شده را تحویل دهد و اگر کاربر انسانی است، همان کدهای کلاینت را ارسال کند.
چگونه مطمئن شویم سایتمان برای خزندهها خالی نیست؟
کافی است سورس صفحه خود را باز کنید (View Page Source با کلیدهای Ctrl+U). اگر متن مقالات و محصولات شما در سورس دیده نمیشود و فقط کدهای اسکریپت وجود دارد، سایت شما دچار مشکل کلاینتساید است.
سیستم خزشگر آنالیز رایگان سئو ما مجهز به موتور تشخیص SPA است و اگر ساختار رندر کلاینت بدون SSR در سایت شما شناسایی شود، به سرعت شما را مطلع کرده و خطای مربوطه را گزارش میکند.