تحسين SEO للتجارة الإلكترونية بلا واجهة
كيف تؤثر بنية التجارة الإلكترونية بلا واجهة في SEO، واختيارات SSR وSSG وCSR، وما الذي لم يعد نظام إدارة المحتوى يتولاه عنك، والأطر المهمة للمتاجر بلا واجهة.
اللغات
في إعداد التجارة الإلكترونية بلا واجهة، تحدد طريقة عرض الواجهة الأمامية للصفحات SEO بدرجة شبه كاملة، لا نظام إدارة المحتوى أو محرك التجارة الموجود خلفها. يضع SSR وSSG المحتوى في HTML الذي يجلبه Googlebot، بينما يترك CSR هيكلًا فارغًا حتى تعمل JavaScript. وكل ما كانت إضافة المنصة تتولاه تلقائيًا في الإعداد المتكامل، مثل البيانات الوصفية ووسوم canonical وخرائط الموقع والبيانات المنظمة، يجب أن تبنيه صراحة. الميزة هي غياب سقف المنصة، والمخاطرة أن كل إعداد افتراضي اعتمدت عليه أصبح مسؤوليتك.
Evidence for this claim Headless storefronts must still expose indexable rendered content and crawlable links; Google processes JavaScript in a rendering phase. Scope: Google JavaScript rendering and crawlability. Confidence: high · Verified: Google Search Central: JavaScript SEO basics Evidence for this claim Headless product pages remain subject to Google's Product structured-data requirements and eligibility rules. Scope: Search-engine requirements independent of commerce backend. Confidence: high · Verified: Google Search Central: Product structured dataالخلاصة — تعني التجارة الإلكترونية بلا واجهة أن واجهة المتجر التي يراها المتسوقون تُبنى منفصلة عن محرك التجارة مثل Shopify أو commercetools أو BigCommerce. وما يهم SEO هو كيفية عرض الواجهة للصفحات. ابنها على الخادم أو وقت النشر، فتحصل Google على HTML مكتمل. أما بناؤها في المتصفح فيجعل Google تنتظر JavaScript؛ وهي قادرة على ذلك، لكنه أبطأ وينطوي على مخاطر أكبر.
ماذا تعني بنية «بلا واجهة» للمتجر؟
تتولى منصة التجارة الإلكترونية التقليدية، مثل WooCommerce أو إعداد Shopify القياسي، كل شيء في نظام واحد: تخزن المنتجات وتعالج الطلبات وتعرض صفحات HTML التي يراها المتسوقون وبرامج الزحف. أما الإعداد بلا واجهة فيفصل هذه المسؤوليات. يدير محرك التجارة المنتجات والمخزون والدفع، بينما يجلب إطار مستقل للواجهة الأمامية، غالبًا Next.js أو Nuxt أو Astro، تلك البيانات ويعرض ما يراه الزائر فعلًا.
يصبح محرك التجارة غير مرئي لمحركات البحث؛ فما تراه Google هو ما تعرضه واجهتك الأمامية.
القرار الوحيد الذي يحدد نتائج SEO
كيف تبني واجهتك الأمامية كل صفحة؟
- SSR (العرض من جهة الخادم): يبني الخادم الصفحة لكل طلب، فتحصل برامج الزحف على HTML مكتمل. وهو آمن لـSEO.
- SSG (إنشاء المواقع الثابتة): تُبنى الصفحات مسبقًا كملفات HTML وقت النشر. وهو الأسرع والأكثر أمانًا لـSEO.
- CSR (العرض من جهة العميل): يرسل الخادم هيكلًا فارغًا، ثم تبني JavaScript الصفحة في المتصفح. تستطيع Google عرضها، لكن عبر قائمة انتظار متأخرة، وغالبًا لا تستطيع برامج الزحف الأخرى ذلك.
تستخدم معظم المتاجر بلا واجهة Next.js أو Nuxt أو Astro، وجميعها تدعم SSR وSSG. يكمن الخطر في تفعيل CSR لصفحات المنتجات أو الفئات من غير قصد.
ما الذي أصبحت مسؤولًا عنه؟
في المنصة المتكاملة، تتولى الوحدات المدمجة أو الإضافات أساسيات SEO. أما في إعداد بلا واجهة، فعليك بناء كل ما يأتي:
- وسوم العنوان والأوصاف الوصفية لكل صفحة، لا قالبًا واحدًا للموقع كله
- وسوم canonical، وهي بالغة الأهمية خصوصًا للتنقل متعدد الأوجه وعناوين URL للمتغيرات
- إنشاء خريطة موقع XML
- البيانات المنظمة JSON-LD من أنواع Product وBreadcrumbList وOrganization
- ملف robots.txt
يعالج كل إطار تغطيه هذه المجموعة، وهي SEO لـJavaScript وNext.js وReact وأنظمة إدارة المحتوى بلا واجهة، جزءًا من هذه الصورة.
Evidence for this claim Headless storefronts must still expose indexable rendered content and crawlable links; Google processes JavaScript in a rendering phase. Scope: Google JavaScript rendering and crawlability. Confidence: high · Verified: Google Search Central: JavaScript SEO basics Evidence for this claim Headless product pages remain subject to Google's Product structured-data requirements and eligibility rules. Scope: Search-engine requirements independent of commerce backend. Confidence: high · Verified: Google Search Central: Product structured dataالخلاصة — يتكون SEO للتجارة الإلكترونية بلا واجهة من طبقتين: بنية العرض التي تحدد هل يحصل Googlebot على HTML أم هيكل فارغ، وطبقة البيانات المنظمة والخلاصة التي تحدد الأهلية للنتائج المنسقة وقوائم المنتجات المجانية في Google Shopping. في العرض، يُعد SSR وSSG آمنين، بينما يحتاج CSR إلى تحقق صريح. وفي البيانات المنظمة، يلزم مخطط Product مع
OfferلاAggregateOfferلأهلية قوائم التجار، ويتعاملProductGroupمعhasVariantمع مجموعات المتغيرات على نحو صحيح. أما خلاصة Google Merchant Center فهي مستقلة عن عرض الواجهة ولا تقل أهمية لأسطح Shopping؛ فالبنية بلا واجهة لا تعفيك من متطلبات جودة الخلاصة.
بنية العرض للمتاجر بلا واجهة
تستخدم الحزمة المعتادة للتجارة الإلكترونية بلا واجهة Next.js، كما في Vercel Commerce، أو Nuxt. ويعمل Shopify Hydrogen على React Router 7 بعد انتقاله من Remix أواخر 2024؛ وحتى منتصف 2026 تحمل حزمة Shopify نفسها @shopify/remix-oxygen إشعارًا بإيقافها يوجه فرق الدمج إلى react-router و@shopify/hydrogen/oxygen. ولا تزال بعض صفحات وثائق Shopify تعرض عينات شيفرة قديمة بطابع Remix؛ لذا تحقق من إصدار الحزمة الذي تستخدمه فعلًا لا من صفحة الوثائق التي وصلت إليها. وتعرض هذه الأطر الصفحات من الخادم أو تنشئها ثابتة افتراضيًا، فيحصل Googlebot على HTML كامل من أول جلب من دون انتظار قائمة العرض.
تختلف أنماط الإخفاق باختلاف الإطار، لكنها تتبع نمطًا واحدًا:
Next.js: يؤدي تحويل صفحة منتج أو فئة إلى Client Component إلى نقل العرض إلى المتصفح. تكون مسارات App Router من نوع Server Components افتراضيًا؛ والخطر هو وسم صفحة كثيرة الزيارات بـ'use client' من غير قصد وعدم اكتشاف ذلك. تحقق باستخدام curl أو مصدر الصفحة؛ فإذا لم يظهر اسم المنتج ووصفه في HTML الخام، فالصفحة تستخدم CSR.
Shopify Hydrogen (React Router): يستخدم وضع الإطار في React Router أدوات تحميل من جهة الخادم افتراضيًا، وهو النمط نفسه الذي استخدمه Remix قبل الانتقال. يكمن الخطر في إعداد التخزين المؤقت في Oxygen، استضافة Shopify؛ إذ قد تقدم الاستجابات القديمة المخزنة محتوى قديمًا لبرامج الزحف بعد تحديث المنتج بوقت طويل.
React مخصص مع Vite: يكون CSR خالصًا فورًا من دون إعداد إضافي، وهو التكوين الأعلى مخاطرة. أضف React Server Components أو انتقل إلى إطار عمل.
البيانات المنظمة لصفحات المنتجات بلا واجهة
تملك الواجهة الأمامية بلا واجهة عنصر <head> الخاص بها، ما يجعل البيانات المنظمة مسؤوليتك بالكامل. وتهم ثلاثة أنواع من schema في التجارة الإلكترونية:
مخطط Product: الحد الأدنى القابل للاستخدام هو name وimage وoffers مع price وpriceCurrency وavailability. استخدم Offer في صفحات الشراء المباشر للتأهل لقوائم التجار؛ إذ يمنع AggregateOffer هذه الأهلية.
ProductGroup مع hasVariant: تحديث schema في فبراير 2024. عندما تمثل الصفحة منتجًا متاحًا بعدة متغيرات، مثل المقاس أو اللون أو المادة، اجمع المتغيرات داخل ProductGroup باستخدام variesBy، مثل https://schema.org/color، واربط كل متغير بواسطة hasVariant. يوضح ذلك العلاقة لـGoogle ويحد من إشارات المحتوى المكرر بين عناوين URL للمتغيرات.
BreadcrumbList: يساعد Google على فهم هرم موقعك ويتيح النتائج المنسقة لمسار التنقل. ويزداد أهميته في الإعدادات بلا واجهة حيث تكون بنية URL مخصصة.
Google Merchant Center والبنية بلا واجهة
عرض واجهتك الأمامية مستقل عن خلاصة GMC. وحتى المتجر بلا واجهة المعروض بإتقان عبر SSR يحتاج إلى إرسال خلاصة منتجات إلى Merchant Center للتأهل لقوائم Shopping المجانية ومجموعة تجارب قوائم التجار الكاملة. وتمثل جودة سمات الخلاصة، مثل العنوان وGTIN والصورة وتطابق السعر، عامل ترتيب في شبكات المنتجات المجانية، مستقلًا عن SEO داخل الصفحة. لا تعامل الخلاصة كشأن إعلاني؛ فهي شأن بحث أيضًا.
إلى أين تتجه بعد ذلك؟
تغطي هذه المجموعة طبقة العرض والأطر بعمق:
- SEO لـJavaScript: أنماط الإخفاق العامة، مثل التكافؤ والتفاعل والحالة والتوقيت، التي تنطبق على أي متجر يعتمد بكثافة على JavaScript
- SEO لـNext.js: الإطار الأبرز للتجارة بلا واجهة، بما يشمل App Router وMetadata API وsitemap.ts وصورة LCP ومزالق ISR
- SEO لـReact: نموذج العرض الأساسي وكيف تضع خدمة العرض على الويب من Google صفحات React في قائمة الانتظار وتعالجها
- SEO لأنظمة إدارة المحتوى بلا واجهة: عندما يوجد محتوى منتجاتك في نظام مثل Contentful أو Sanity أو Storyblok بدل محرك التجارة نفسه
- منصات التجارة بلا واجهة: مقارنة الخيارات الفعلية مثل Shopify Hydrogen وBigCommerce وcommercetools وSalesforce PWA Kit وMedusa وSaleor وElastic Path وما يتركه كل منها لك كي تبنيه
- التجارة القابلة للتركيب: نمط بنية MACH في المستوى الأعلى من البنية بلا واجهة، ومخاطر مسؤولية SEO عند تجميع حزمة من موردين مستقلين
يتكون SEO للتجارة الإلكترونية بلا واجهة من طبقتين:
طبقة العرض التي تحدد قابلية الزحف:
- ينتج SSR وSSG ملف HTML يقرأه Googlebot عند أول جلب، لذا فهما آمنان.
- ينتج CSR هيكلًا فارغًا؛ وتعرضه Google لاحقًا عبر قائمة انتظار للعرض قد تنتهي مهلتها، لذا ينطوي على مخاطر.
- تستخدم Next.js وReact Router في Hydrogen وNuxt العرض SSR أو SSG افتراضيًا؛ فتحقق باستخدام
curlأو مصدر الصفحة من أن صفحات المنتجات والفئات لم تتحول إلى CSR من غير قصد.
طبقة البيانات المنظمة والخلاصة التي تحدد أهلية النتائج المنسقة وShopping:
- في مخطط Product، استخدم
OfferلاAggregateOfferفي صفحات الشراء المباشر للتأهل لقوائم التجار. - يمثل
ProductGroupمعhasVariant، منذ فبراير 2024، الترميز الصحيح لمجموعات المتغيرات. - جودة خلاصة GMC، بما فيها العنوان وGTIN والصورة وتطابق السعر، عامل ترتيب مستقل لأسطح Shopping وليست اختيارية في الإعدادات بلا واجهة.
ما يجب أن تبنيه الآن صراحة في غياب إضافة للمنصة:
- عنوان ووصف وصفي لكل صفحة
- وسوم canonical، ولا سيما للتنقل متعدد الأوجه وعناوين URL للمتغيرات
- خريطة موقع XML
- JSON-LD من نوعي Product وBreadcrumbList
- ملف robots.txt
Google Search Central
- البيانات المنظمة للمنتجات: متطلبات schema لأنواع Product وOffer وProductGroup
- فهم أساسيات SEO في JavaScript: كيفية تعامل Googlebot مع المحتوى المعروض بواسطة JavaScript
- إصلاح المحتوى المحمّل عند الطلب: Intersection Observer والتمرير اللانهائي
- خرائط مواقع XML: تنسيق الخريطة وإرسالها
Google Merchant Center
- قوائم المنتجات المجانية: الأهلية للظهور المجاني على أسطح Shopping
- مواصفات بيانات المنتجات: متطلبات سمات الخلاصة
وثائق الأطر
- Metadata API في Next.js: بيانات App Router الوصفية وgenerateMetadata
- ملف sitemap.ts في Next.js: إنشاء خريطة الموقع انطلاقًا من ملف
- تحميل البيانات في React Router: أدوات التحميل من جهة الخادم، وهي النمط الذي يستخدمه Shopify Hydrogen الآن
“Some JavaScript sites may use the app shell model where the initial HTML does not contain the actual content and Google needs to execute JavaScript before being able to see the actual page content that JavaScript generates … The page may stay on this queue for a few seconds, but it can take longer than that.” (ترجمة) «قد تستخدم بعض مواقع JavaScript نموذج غلاف التطبيق، حيث لا يحتوي HTML الأولي على المحتوى الفعلي وتحتاج Google إلى تنفيذ JavaScript قبل أن ترى محتوى الصفحة الذي تنشئه JavaScript… وقد تبقى الصفحة في قائمة الانتظار بضع ثوان، لكن ذلك قد يستغرق وقتًا أطول.» — Google Search Central، «فهم أساسيات SEO في JavaScript». انتقل إلى الاقتباس
“We do an HTTP request, and we get something back … some barebone HTML and all it does is load the JavaScript and run the JavaScript. Then, this HTML … goes into rendering. Rendering runs JavaScript — boom!, a lot of content happens that wasn’t there before.” (ترجمة) «نجري طلب HTTP ونحصل على استجابة… هيكل HTML أولي لا يفعل سوى تحميل JavaScript وتشغيلها. ثم ينتقل هذا HTML إلى العرض. يشغل العرض JavaScript، وفجأة يظهر قدر كبير من المحتوى لم يكن موجودًا من قبل.» — Martin Splitt، ممثل المطورين في Google، في لقاء ساعات مكتب Google Webmaster Central. [المصدر: تسجيل ساعات المكتب؛ تحقّق منه مقابل الصوت الحي]
مصدر اقتباس Martin Splitt أعلاه تسجيل لقاء لساعات المكتب؛ تحقّق من ألفاظه الدقيقة مقابل المصدر الحي قبل اعتماده اقتباسًا حرفيًا.قائمة فحص SEO للتجارة الإلكترونية بلا واجهة
التحقق من العرض
- ينفذ
curl -s https://yourstore.com/products/[slug] | grep '<title>'للتحقق من وجود العنوان في HTML الخام - اعرض مصدر صفحة منتج وتأكد من ظهور اسم المنتج ووصفه من دون JavaScript
- تأكد من أن صفحات الفئات والمجموعات تُعرض من الخادم أيضًا، لأن معظم أخطاء CSR تقع في المسارات الديناميكية
- افحص أي صفحة رئيسية عبر Google Search Console ← فحص عنوان URL ← «اختبار عنوان URL المنشور»
البيانات المنظمة
- مخطط Product في كل صفحة تفاصيل منتج:
nameوimageوoffersمعpriceوpriceCurrencyوavailability - استخدام
OfferلاAggregateOfferفي صفحات الشراء المباشر، وهو مطلوب لأهلية قوائم التجار - استخدام
ProductGroupوhasVariantوvariesByلمجموعات المتغيرات مثل اللون والمقاس والمادة - استخدام
BreadcrumbListفي صفحات المنتجات والفئات - التحقق باستخدام اختبار النتائج المنسقة
مسؤولية SEO التقني
-
<title>و<meta name="description">فريدان لكل صفحة، لا قالبًا واحدًا للموقع كله - وسم canonical في كل صفحة، ولا سيما عناوين URL للمتغيرات والتصفية
- إنشاء خريطة موقع XML وإرسالها، على أن تشمل صفحات المنتجات والفئات
- إتاحة robots.txt وصحته وألا يحجب JS أو CSS
- معالجة عمليات إعادة التوجيه 301 على مستوى الإطار أو CDN، لا ضياعها في موجه SPA
Google Merchant Center
- إرسال خلاصة المنتجات إلى GMC حتى عند استخدام القوائم المجانية فقط
- تطابق السعر: يطابق سعر الخلاصة سعر صفحة الهبوط تمامًا
- تضمين GTIN للمنتجات ذات العلامات التجارية
- مراجعة تشخيصات الخلاصة في GMC ← Diagnostics
إطار قرار SEO للتجارة الإلكترونية بلا واجهة
اختيار الإطار بحسب مخاطر SEO
| الإطار | العرض الافتراضي | مستوى مخاطر SEO | ملاحظات |
|---|---|---|---|
| Next.js (App Router) | Server Components (SSR) | منخفض | أفضل وضع افتراضي لـSEO؛ احذر إضافة 'use client' من غير قصد إلى مسارات المحتوى |
| React Router (Hydrogen) | أدوات تحميل من جهة الخادم | منخفض | SSR ممتاز؛ إعداد التخزين المؤقت في Oxygen هو العقبة الرئيسية؛ انتقل Hydrogen من Remix أواخر 2024 |
| Nuxt 3 | SSR + SSG | منخفض | يشبه Next.js؛ يتولى خادم Nitro العرض |
| Astro | SSG افتراضيًا | منخفض جدًا | HTML ثابت؛ الأفضل للمتاجر بلا واجهة الغنية بالمحتوى |
| React (Vite/CRA) | CSR | مرتفع | يحتاج إلى إعداد صريح لـSSR أو SSG؛ لا تستخدمه من دون إطار |
متى تختار SSG بدل SSR؟
استخدم SSG عندما:
- يكون كتالوج المنتجات مستقرًا نسبيًا، بأقل من 100 تحديث يوميًا
- تستخدم ISR لإعادة التحقق، مثل
revalidateفي Next.js أوuseAsyncDataمعlazyفي Nuxt - يكون الأداء الأولوية القصوى، عبر HTML ثابت من حافة شبكة CDN
استخدم SSR عندما:
- يتغير توفر المنتج أو سعره أو تخصيصه مع كل طلب
- تكون دقة المخزون الفوري حاسمة، بحيث يجب أن تكون حالة نفاد المخزون صحيحة
- يكون الكتالوج أكبر من أن يُبنى مسبقًا وقت النشر
تجنب CSR في:
- صفحات المنتجات
- صفحات الفئات والمجموعات
- أي صفحة تريد لها ترتيبًا مجانيًا
كيف ينبغي عرض هذا المسار بلا واجهة؟
اتخذ القرار على مستوى قالب المسار؛ إذ يمكن لصفحات تفاصيل المنتجات وصفحات الفئات اختيار أسلوبين مختلفين.
Choose SSR, SSG, or a different frontend approach
What if the current storefront is client-rendered?
إخفاقات SEO الشائعة في التجارة الإلكترونية بلا واجهة
يظهر محتوى المنتج في المتصفح لا في مصدر الصفحة
السبب المرجح: انتقل مسار المنتج أو جلب البيانات إلى العرض من جهة العميل، كما يحدث عند استخدام Client Component عالي المستوى في Next.js.
الإصلاح: اجلب البيانات في Server Component أو أداة تحميل أو مسار خادم، وأعد محتوى المنتج القابل للفهرسة ضمن HTML الأولي. تحقق باستخدام curl ومصدر الصفحة، لا DOM بعد اكتمال hydration فقط.
تعرض نتائج البحث عنوانًا عامًا لمنتجات كثيرة
السبب المرجح: تستخدم الواجهة الأمامية بلا واجهة قيمة احتياطية للموقع كله لأن البيانات الوصفية للمسار لا تتلقى بيانات المنتج من الخادم.
الإصلاح: أنشئ العنوان والوصف وcanonical من استجابة المنتج في جهة الخادم. ازحف عدة قوالب للمنتجات والفئات وتأكد من أن كل استجابة خام تحتوي القيم الفريدة المتوقعة.
يرى برنامج الزحف سعرًا أو توفرًا قديمًا
السبب المرجح: تظل استجابة SSG أو ISR أو النسخة المخزنة على الحافة صالحة بعد تحديث الكتالوج، بينما يعرض الجلب من جهة العميل قيمة أحدث للمتسوقين بعد hydration.
الإصلاح: اربط أحداث التجارة بإعادة التحقق أو قصّر نافذة التخزين المؤقت للمسارات الحساسة للسعر. قارن HTML الخام والصفحة المعروضة والخلاصة والدفع للرمز SKU نفسه حتى تتطابق الأربعة.
تغيب النتائج المنسقة للمنتج رغم أن JSON-LD يبدو صالحًا
الأسباب المرجحة: لا يُحقن الترميز إلا بعد JavaScript، أو يستخدم AggregateOffer في صفحة شراء مباشر، أو يحذف حقول العرض المطلوبة، أو يصف بيانات لا تطابق الصفحة.
الإصلاح: ضمّن كائن Product واحدًا مع Offer المناسب في الاستجابة المعروضة من الخادم، ثم شغّل اختبار النتائج المنسقة وقارن قيمه بالمنتج المرئي وخلاصة GMC.
تتنافس عناوين URL للمتغيرات أو تُحدد لها canonical بصورة غير متوقعة
السبب المرجح: تنشئ الواجهة الأمامية عناوين URL لحالات قابلة للزحف من دون canonical متسق ومن دون التعبير عن العلاقة بين مجموعة المنتج ومتغيراته.
الإصلاح: اختر استراتيجية المتغيرات القابلة للفهرسة، وحافظ على اتساق وسوم canonical معها، ونفذ ProductGroup مع hasVariant عندما تمثل الصفحة مجموعة متغيرات. ازحف كل حالة قابلة للاختيار للتحقق من عنوان URL والترميز الناتجين.
تختفي المنتجات بعد الانتقال إلى بنية بلا واجهة
الأسباب المرجحة: تفتقر عناوين URL القديمة إلى عمليات إعادة توجيه من الخادم، أو خريطة الموقع الجديدة ناقصة، أو يخفي تنقل SPA استجابات «غير موجود» من الخادم.
الإصلاح: اختبر عناوين URL القديمة كطلبات مباشرة، وتحقق من خريطة إعادة التوجيه من القديم إلى الجديد، وقارن خريطة الموقع الجديدة بالكتالوج الحي. لا يحل سلوك موجه العميل محل إعادة توجيه HTTP.
التحقق من طبقة العرض بلا واجهة
فحص HTML الخام بحثًا عن الإشارات المطلوبة
شغّل هذا في الصدفة على عنوان URL لمنتج وآخر لفئة. واستبدل القيم النموذجية بعبارات يجب أن تظهر في تلك الصفحات.
url='https://store.example/products/example'
html="$(curl -fsSL "$url")"
printf '%s' "$html" | grep -i '<title'
printf '%s' "$html" | grep -i 'rel="canonical"'
printf '%s' "$html" | grep -F 'Example Product Name'
printf '%s' "$html" | grep -F 'application/ld+json'إذا لم تظهر الإشارة إلا بعد تشغيل المتصفح لـJavaScript، يكشف هذا الاختبار الفجوة في الاستجابة الخام.
مقارنة قائمة عناوين URL دفعة واحدة باستخدام Python
احفظ عناوين URL الأساسية للمنتجات والفئات في urls.txt، كل عنوان في سطر. يعرض هذا الاختبار الحالة، وهل يحتوي HTML النهائي عنوانًا وcanonical، وعدد مرات ظهور سلاسل schema من نوع Product.
from urllib.request import Request, urlopen
from urllib.error import HTTPError
import re
for url in open("urls.txt", encoding="utf-8"):
url = url.strip()
if not url:
continue
try:
response = urlopen(Request(url, headers={"User-Agent": "HeadlessSEOCheck/1.0"}))
html = response.read().decode("utf-8", errors="replace")
print(url, response.status,
"title=" + str(bool(re.search(r"<title[^>]*>.+?</title>", html, re.I | re.S))),
"canonical=" + str('rel="canonical"' in html.lower()),
"product_schema=" + str(len(re.findall(r'"@type"\s*:\s*"Product"', html))))
except HTTPError as error:
print(url, error.code, "HTTP error")فحص البيانات الوصفية المعروضة في Chrome DevTools
الصق هذا في وحدة التحكم داخل صفحة منتج. يفحص DOM بعد hydration؛ فقارن النتيجة ببرامج الاستجابة الخام أعلاه لاكتشاف مشكلات التكافؤ.
({
title: document.title,
canonical: document.querySelector('link[rel="canonical"]')?.href ?? null,
productSchemas: [...document.querySelectorAll('script[type="application/ld+json"]')]
.filter((node) => /"@type"\s*:\s*"Product"/.test(node.textContent)).length,
productHeading: document.querySelector('h1')?.textContent?.trim() ?? null,
}); من أنحاء القطاع
- Vercel Commerce، قالب بداية Next.js: تطبيق مرجعي مفتوح المصدر لواجهة متجر بلا واجهة
- وثائق Shopify Hydrogen: إطار Shopify الرسمي للبنية بلا واجهة، وهو مبني على React Router 7 منذ 2026، مع أن بعض صفحات الوثائق لا تزال تعرض عينات شيفرة Remix السابقة للانتقال
- Google Search Central: فهم أساسيات SEO في JavaScript: إرشاد Google للمطورين بشأن عرض JavaScript؛ أُحيل مقال web.dev عن الموضوع إلى التقاعد، وهذا هو موضع الإرشاد الحالي
- Onely: كيف يزحف Google إلى محتوى JavaScript؟ تجربة: شرح تقني مفصل لكيفية زحف Googlebot إلى المحتوى المعروض بواسطة JavaScript وفهرسته؛ كان الرابط السابق في هذا الموضع يعيد 404، وهذا هو المقال الحالي المكافئ لدى Onely
- Google Search Central: البيانات المنظمة للمنتجات: المتطلبات الرسمية لـschema من أجل النتائج المنسقة وقوائم التجار
اختبر نفسك: SEO للتجارة الإلكترونية بلا واجهة
خمسة أسئلة سريعة عن بنية المتاجر بلا واجهة وSEO. اختر إجابة لكل سؤال ثم تحقق.
سجل التغييرات
تم التحديث في 11 أغسطس 2026.
ملخص تحريري وتفاصيل التغيير المسجلة.تفاصيل التغيير
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
المقارنة الكاملة غير متاحة — لم تُؤرشف لقطة سابقة لهذه المراجعة.
تم التحديث في 11 أغسطس 2026.
ملخص تحريري وتفاصيل التغيير المسجلة.تفاصيل التغيير
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
المقارنة الكاملة غير متاحة — لم تُؤرشف لقطة سابقة لهذه المراجعة.
تم التحديث في 19 يوليو 2026.
ملخص تحريري وتفاصيل التغيير المسجلة.تفاصيل التغيير
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
المقارنة الكاملة غير متاحة — لم تُؤرشف لقطة سابقة لهذه المراجعة.
تم التحديث في 18 يوليو 2026.
ملخص تحريري وتفاصيل التغيير المسجلة.تفاصيل التغيير
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
المقارنة الكاملة غير متاحة — لم تُؤرشف لقطة سابقة لهذه المراجعة.