اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
همه ما میدانیم برای اینکه محتوای ما به وسیله Google و سایر موتورهای جستجو index شود باید این محتوا در سمت سرور ایجاد و به کلاینت ارسال شود. مدتی بود با مقالاتی مواجه میشدم که نیازی به این کار نیست و گوگل این قابلیت را دارد تا اطلاعاتی را که سمت کلاینت پردازش و Render میشوند نیز index کند. تا این که خودم تصمیم گرفتم این مورد را تست کنم.
چند روز پیش شروع به بررسی SEO در AngularJS 1.x کردم. صورت مسئلهی من به این صورت بود که نام تعدادی شهر را با AngularJS در صفحه Render کنم، طوریکه در DOM اولیه که از سرور هدایت میشود، نام شهرها موجود نباشند. کد زیر را مشاهده کنید.<html dir="rtl"> <head> <title>وب سایت</title> <script src="angular.min.js"> </script> </head> <body ng-app="app"> <ul ng-controller="ctrl"> <li ng-repeat="item in list">{{item}}</li> </ul> </body> <script> var app=angular.module('app',[]); app.controller('ctrl',function($scope,$timeout){ $scope.list=[ 'اردبیل', 'تهران', 'شیراز', 'قزوین', ] }); </script> </html>
سپس در وب مستر گوگل، مسیر را تعریف کردم و به crawl گوگل اعلام کردم که این مسیر را index کند. بعد از مدتی متوجه شدم این صفحه با تمام نامهای شهرها index شدهاند!
مسئله را سختتر کردم و این بار به صورت مسئله اولیه این مورد را هم اضافه کردم که بعد از اینکه صفحه بارگذاری شد، بعد از 5 ثانیه، نام شهر مشهد هم به لیست DOMها اضافه شود و به کد بالا این کد را هم اضافه کردم (این کار را برای شبیه سازی درخواست AJAX انجام دادم):
$timeout(function(){ $scope.list.push('مشهد') },5000);
البته نیاز به بررسی دقیقتر این مسئله هست و باید در پروژههای واقعی این مورد را بررسی کرد تا safe بودن این قابلیت گوگل مورد تایید قرار بگیرد. در حال حاضر برای SEO در ReactJS و AngualrJS و VueJS از Render سمت Server استفاده میکنم. اگر این قابلیت به طور 100% جوابگوی SEO باشد، دیگر نیازی نیست Developerها سمت سرور و کلاینت، کارهای تکراری برای SEO انجام دهند.