سئو‌ی وبسایتهای SPA

سلام!

یه سوال اساسی داشتم درمورد نحوه‌ی کار وبسایتهای SPA برای کاربرانی که JS ندارن و البته ربات‌هایی که نمیتونن JS ران کنن.

به نظرتون بهتره چه کاری انجام بدیم برای اینکه بتونیم به این کاربرها سرویس بدیم و رباتها هم بتونن با خیال راحت گشت‌و‌گذار کنن؟

چیزی که به ذهنم میرسه، سرویس gmail هست که موقع لود، پایین صفحه لینک نسخه‌ی قدیمیشو گذاشته که یه نسخه‌ی ساده از gmail هست با امکانات خیلی کم.
و سیستم file sharing نرم‌افزار calibre (نرم‌افزار مدیریت کتاب الکترونیکی) که یه کار مشابه انجام داده. (دستگاههای کتاب‌خوان kindle قابلیت اجرای js و خیلی از cssها رو ندارن)

حالا به نظر شما، (چقدر) لازمه که همچین‌کاری انجام بشه برای یه وبسایت؟
با توجه به اینکه SPAها تمام چیزی که با curl (یا بروزرهای تحت ترمینال) میشه ازشون دید، یه div خالی هست.


سوال بعد اینکه این کار رو چطور باید انجام بدیم؟ (چه روشی بهتره؟)
با توجه به اینکه من از clojure برای back-end و clojurescript برای front-end استفاده میکنم و در هردو بخش میتونم hiccup بنویسم، میتونم کدی که برای front-end مینویسم رو عینا کپی کنم توی back-end (که با لود jsها همه چی بازنویسی بشه)

پروژم هنوز هیچی توش نیست. نمیدونم، شاید با بزرگ شدن پروژه اینکار غیر ممکن بشه یا لازم باشه یه بخشهایی فقط کپی بشه.

به نظر شما اینکار درسته؟ یا راه بهتری هست؟ (یا لازمه هر صفحه دوبار ساخته بشه؟)


ممنون میشم اگه تجربیاتتونو به اشتراک بذارید.

اگر هدف استفاده از دیتای api باشه که با هر چیزی که بتونه json رو از http بخونه و parse کنه میشه اطلاعات رو پردازش کرد، اما اگر بخشی از دیتا که در js پردازش و تولید میشه هم لازمه که دیگه نیاز به js engine هم داریم و تقریبا میشه گفت راه دیگه ای وجود نداره بجز رندر کردن و سرو کردن html برای کسی که js نداره. امیدوارم اشتباه متوجه موضوع نشده باشم.

1 Like

مرسی.
درست متوجه شدی. هدفم اینه که سایتی که میسازم برای همه قابل دسترسی باشه.
حداقل بخشهای تقریبا ثابت یا چیزایی که تحت تاثیر cookie قرار نمیگیرن.

پس با این اوصاف، یا باید یه کپی از viewهای front تو back بگیرم همیشه، یا باید برای هرکدوم یک بار کد بزنم.

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

3 Likes

پویا جان راه دیگه ای فکر کنم وجود نداره . یادمه یک بار یه پروژه ای رو داشتیم طراحی میکردیم که قسمت جستجوش spa بود و یه متخصص سئو آوردن و گفت یا باید یه نسخه معمولی هم بنویسید یا پروفایل و … غیر جوری باشه که نسخه معمولی داشته باشن و در نتیجه ما مجبور شدیم قسمت پروفایل رو معمولی کنیم . اگر برات ربات ها و … ضروری ان باید حتما پیاده کنی

1 Like

با توجه به این مطالب، پس ۳تا راه هست.

  • بیخیال
  • با توجه به اینکه front و back از یه زبون استفاده میکنم، برای هر release کدهایی که تو front نوشتم رو کپی کنم توی back هم بذارم (ماهی یه بار این دوتا رو sync کنم)
    مشکلش اینجاست که یه سری لایبرری فقط توی clojurescript هست و تو clojure نیست. باید پروژه بزرگ بشه ببینم توی این مسائل به مشکل میخورم یا نه. (با توجه به اینکه توی front-end همه چیز با معماری فریموورکی ساخته میشه و viewها جدا هستن، احتمالا هیچ لایبرری خاصی داخل viewها استفاده نشه بجز همون hiccup)
  • اگه فقط نیاز به پشتیبانی از botها دارم، تگ‌های صفحات استاتیکم رو از داخل بروزر کپی کنم بندازم تو back :sweat_smile: (اینجوری دیگه رندر گرفتن تمپلیت هم لازم نیست)

متشکرم از هم‌فکریتون.

1 Like

حالا شما از @lxsameer هم یه مشورت بگیر پشیمون نمیشی :smile:

برای سوال اول باید بگم که خیلی از بات ها می تونن جاواسکریپت اجرا کنن و کلا sitemap و rss و این چیزا خیلی به کار میاد برای حل مشکل. برای سوال دوم هم عموما اینجوریه که جوری درست می کنن بک اند رو که state رو بنا به route در زمان اجرا شدن اپ فرانت اند بهش پاس می ده و این اپ فرانت اند هست که می دونه الان باید شرایط چه جوری باشه

2 Likes

معمولا چنین مواردی رو برای بخش هایی انجام می دند که ربات ها به اونجا سر نمی زنند. یعنی محدود به یک لاگین هستند . ساخت چنین چیزی اگر به ربات ها معرفی نشه می تونه باعث داپلیکیت کانتنت و داپلیکیت لینک بشه

این بخش با رندر از طرف سرور نمی تونه هندل بشه ؟ مخصوصا برای بخش هایی که با محتوا سرکار دارند!!؟

3 Likes

https://fgimian.github.io/blog/2018/06/06/why-crystal-is-my-next-language/
جا پیدا نکردم بفرستم به این حتما یه نگاه بنداز :grin::grin::grin:

1 Like

برای برنامه هایی که جاوااسکریپت محتوای سایت رو ایجاد می کنه، نظیر react، تکنیکی که می تونین استفاده کنین رندر در سمت سرور هست، server side rendering. این کار ساده هست و یک سری مزیت ها و معایب هم داره. مزیت این هست که زمان رندر سایت در سمت کاربر صفر میشه، یعنی کاربر محتوا رو همون اول کار می بینه. این کاربر می تونه موتور جستجو باشه یا شخص واقعی. اگه سمت سرور از caching استفاده کنین می تونین بهنیه سازی های بهتری رو انجام بدین. معایبی که میشه براش گفت این هست که می بایستی یک سری از کارهایی رو که بصورت دیگه ای انجام بدین. به عنوان مثال شی window وجود نداره و نمی تونین ازش استفاده کنین.
می تونین NextJS رو بررسی کنین. از روش مشابهی استفاده می کنه. یا اینکه توی گوگل بگردید server-side rendering for react apps. گیت ریپوهای زیادی هستن که نمونه گذاشته اند. توی مدیوم هم می تونین مقالاتی رو در نحوه انجام اینکار رو با کمترین تغییر توی برنامتون پیدا کنید.

1 Like

متشکرم از پاسختون.
بله یه جورایی میشه گفت از react استفاده میکنم. ولی با js کد نمیزنم. (با clojurescript کد میزنم که ترنسپایل میشه به js)
درمورد server-side rendering مشکلی ندارم. فقط الآن سیستم اینطوری هست که یه صفحه‌ی html تو سرور رندر گرفته میشه که فقط یه div توش هست و یه سری لینک به css و jsها. و من از طریق id داخل اون div کل صفحه رو در front-end میسازم (بنابر این دستم توی تغییر همه چیز بازه)
تنها مشکل اینه که اگه بخوام همه چیزو سمت سرور رندر بگیرم، مجبورم توی front-end به جای یک div، چندتا id رو آپدیت کنم. این یه کم کار رو سخت میکنه.

من طی بررسی هایی که می کردم، قرار بود گوگل این قابلیت رو به موتورش اضافه کنه که js رو قرار هست رندر بگیره. اینکه کی عملی بشه معلوم نیست.

فراموش کرده ام این لینک رو، اما گوگل یه صفحه ای داشت که می تونین با اون چک کنین ربات گوگل چجوری صفحتون رو می بینه.

در نهایت اگه بصورت داینامیک صفحتون لود میشه، همونطور که اشاره کردین، عملا هیچی توی صفحه نیست و برای محتوا، بعد یک یا دو ثانیه ظاهر میشه.

همونطور هم که خودتون و دوستان بالا اشاره کردن، می تونین متنی رو بزنین که مخفی باشه و فقط گوگل بتونه اون رو ببینه. برای این هم فکر می کنم گوگل خودش تگ هایی رو که مخفی هست رو نادیده می گیره.

همون پیش نمایش موتور گوگل رو بتونین ببینین، بهتر می تونین صفحتون رو بهینه کنین. فکر می کنم گوگل سرچ مستر بودش.

1 Like