كيفية تنفيذ Hreflang خطوة بخطوة
شيفرة عملية لطرق hreflang الثلاث: وسوم رأس HTML وترويسات HTTP من نوع Link وإشارات خريطة موقع XML، مع قواعد الصياغة وأتمتة CMS على نطاق واسع وسير التحقق من صحة النشر.
اللغات
دليل واحد في هذه الصفحة
- أداة مباشرة ذات صلةreturntag - hreflang checker
توجد ثلاث طرق فقط لإضافة hreflang: وسوم link في رأس HTML، أو ترويسات استجابة HTTP من نوع Link للملفات غير المكتوبة بـHTML مثل PDF، أو مدخلات xhtml:link في خريطة موقع XML، وهي الأنسب على نطاق واسع. اختر طريقة واحدة؛ فـGoogle تتعامل معها بالتساوي ولا فائدة من جمعها. تخضع كل طريقة لقاعدتين لا تقبلان التفاوض: الإشارة الذاتية، أي أن تسرد كل صفحة نفسها، والتبادلية، أي إذا أشارت A إلى B وجب أن تشير B إلى A وإلا تجاهلت Google الزوج. تتكون الرموز من لغة ISO 639-1 ومنطقة اختيارية وفق ISO 3166-1 alpha-2، ويمثل x-default الخيار الاحتياطي. ولّد كل شيء من مصدر حقيقة واحد، ثم تحقق من الرأس المعروض لا من مصدر الصفحة وحده؛ ففي دراستي لـ374 756 نطاقًا، كان لدى أكثر من 67 % من إعدادات hreflang مشكلة واحدة على الأقل.
الخلاصة — توجد ثلاث طرق لإضافة hreflang: وسوم
<link>صغيرة في<head>الصفحة، أو ترويسةLink:يرسلها الخادم، أو مدخلات في خريطة موقع XML. اختر واحدة فقط. وأيًا كان اختيارك، لا تتغير قاعدتان: تسرد كل صفحة نفسها، وكل صفحة تشير إليها يجب أن تشير بدورها إلى صفحتك، وإلا تجاهلت Google المجموعة كلها. ثم تحقق من ظهور الوسوم في الصفحة بالطريقة التي قصدتها.
ابدأ هنا: لقد قررت بالفعل أنك تحتاج إلى hreflang
هذا هو الدليل العملي. إذا كنت لا تزال غير متأكد هل تحتاج إلى hreflang أو ما الذي يفعله، فاقرأ أولًا النظرة العامة إلى hreflang. تفترض هذه الصفحة أنك تعرف أن لديك نسخًا متعددة من صفحة بلغات أو بلدان مختلفة، وأنك تريد تنفيذها تنفيذًا صحيحًا.
الطرق الثلاث لإضافته، اختر واحدة
- وسوم HTML من نوع
<link>داخل<head>. تضيف بضعة أسطر إلى أعلى HTML في كل صفحة. وهي الأسهل فهمًا ورؤية، وتناسب المواقع الصغيرة. - ترويسات HTTP من نوع
Link:. المعلومات نفسها يرسلها الخادم في الاستجابة بدل HTML. وهذا الخيار الوحيد للملفات غير المكتوبة بـHTML، مثل PDF الذي لا يملك<head>لوضع الوسوم فيه. - خريطة موقع XML. تسرد كل نسخ اللغات داخل ملف خريطة الموقع بدل إدراجها في كل صفحة. وهي الأنسب للمواقع الكبيرة لأنك لا تحتاج إلى لمس كل صفحة؛ فالخريطة كلها في موضع واحد.
تتعامل Google مع الطرق الثلاث بالتساوي. لا توجد طريقة «أسرع» أو «أقوى»، ولا فائدة من استخدام أكثر من طريقة في الوقت نفسه؛ فهذا لا يفعل سوى إضافة مواضع أخرى قد تفقد فيها النسخ اتساقها.
Evidence for this claim Google supports equivalent HTML, HTTP-header, and sitemap methods for declaring localized versions; HTTP headers can be used for non-HTML files such as PDFs. Scope: Google Search hreflang implementation methods. Confidence: high · Verified: Google: Localized versionsشكل نسخة HTML
لنفترض أن لديك صفحة إنجليزية أمريكية وأخرى بريطانية وصفحة ألمانية وصفحة رئيسية عالمية تتيح للزوار الاختيار. في الصفحة الإنجليزية الأمريكية تضع:
<link rel="alternate" hreflang="en-us" href="https://example.com/us/" />
<link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />اقرأ كل سطر بهذا المعنى: «توجد نسخة بديلة من هذه الصفحة، وهي مخصصة لهذه اللغة/المنطقة وتقع في هذا العنوان». ويمثل سطر x-default الخيار الاحتياطي لكل مَن لا تتطابق لغته مع النسخ الأخرى.
لاحظ أمرين، لأنهما القاعدتان اللتان تجعلان hreflang يعمل:
- الصفحة الأمريكية تسرد نفسها؛ فسطر
en-usالأول يشير إلى الصفحة الأمريكية التي تقف عليها أصلًا. - يجب أن تحمل كل صفحة أخرى في المجموعة الكتلة نفسها التي تشير إلى سائر الصفحات. تحتاج الصفحة البريطانية والألمانية والصفحة الرئيسية كلها إلى نسختها من هذه الأسطر الأربعة.
القاعدتان بعبارات بسيطة
- كل صفحة توفر رابط الإرجاع. إذا ربطت الصفحة الأمريكية بالألمانية، فعلى الألمانية أن تربط بالأمريكية. إذا غاب رابط العودة، تجاهلت Google الزوج. وهذه القاعدة هي الأكثر تعرضًا للكسر.
- كل صفحة تشير إلى نفسها. تسرد كل نسخة عنوان URL الخاص بها ضمن المجموعة. تصف Google ذلك بأنه اختياري لكنه ممارسة جيدة؛ طبقه على أي حال لإبقاء كل شيء متسقًا.
استخدم عناوين ويب حقيقية ومكتملة
استخدم دائمًا العنوان كاملًا ابتداءً من https://. لا تستخدم /us/ أو //example.com/us/، بل العنوان كله: https://example.com/us/. ويجب أن يطابق بدقة العنوان الذي تفهرسه Google: البروتوكول نفسه، ووجود www أو غيابه، والشرطة المائلة الختامية، وحالة الأحرف.
استخدم الرموز الصحيحة
يتكون الرمز من لغة بحرفين، وقد يتبعها شرطة ثم بلد بحرفين: en وen-us وde وes-mx. ومن الأخطاء التقليدية en-uk، والصحيح en-gb لأن uk تعني الأوكرانية، واستخدام jp لليابانية، والصحيح ja.
ثم تحقق من نجاح التنفيذ
أهم ما يغفله المبتدئون: بعد النشر، افحص الصفحة المعروضة فعليًا لتأكيد وجود الوسوم داخل <head>. إذا أضافت JavaScript الوسوم فقد لا تظهر عند «عرض مصدر الصفحة»، لكنها تظهر في الصفحة الحية. ويمكن أن يعرض URL Inspection في Google Search Console ما عرضته Google فعليًا.
هل تريد الشيفرة الكاملة لطريقتي الترويسات وخريطة الموقع، وكيفية أتمتة ذلك عبر CMS كامل، وخطوات التحقق الدقيقة، والأخطاء التي تعطل العناقيد بصمت؟ انتقل إلى تبويب المتقدم.
الخلاصة — ثلاث طرق، اختر واحدة: وسوم HTML من نوع
<link>داخل<head>، أو ترويسات HTTP من نوعLink:، وهي الخيار الوحيد للملفات غير المكتوبة بـHTML مثل PDF، أو مدخلات<xhtml:link>في خريطة موقع XML، وهي الأنسب على نطاق واسع لأن ملفًا واحدًا تولده الآلة أسهل في ضمان الجودة. تقول Google إن الطرق الثلاث متكافئة ولا فائدة من جمعها. تخضع كل طريقة للإشارة الذاتية والتبادلية، وتستخدم عناوين URL مطلقة، ورمز لغة ISO 639-1 مع منطقة اختيارية وفق ISO 3166-1 alpha-2. ولّد كل شيء من مصدر حقيقة واحد؛ فـhreflang الذي يُصان يدويًا يتدهور. ثم تحقق من الرأس المعروض، وازحف إلى العنقود كله للتحقق من التبادلية، وأعد الفحص بعد كل تغيير في URL. لا تعِد توجيه الزواحف تلقائيًا حسب الموقع الجغرافي.
قبل كتابة سطر من الشيفرة: ثلاثة قرارات
1. أي طريقة. توضح Google أن الاختيار يتعلق بالراحة لا الأداء: “The three methods are equivalent from Google’s perspective and you can choose the method that’s the most convenient for your site.” (الترجمة العربية) «الطرق الثلاث متكافئة من منظور Google، ويمكنك اختيار الطريقة الأنسب لموقعك». قاعدتي التقريبية:
Evidence for this claim Google supports equivalent HTML, HTTP-header, and sitemap methods for declaring localized versions; HTTP headers can be used for non-HTML files such as PDFs. Scope: Google Search hreflang implementation methods. Confidence: high · Verified: Google: Localized versions- بضعة عناوين URL وموقع ثابت أو بسيط ولغات ومناطق قليلة ← وسوم HTML من نوع
<link>. - أصول غير مكتوبة بـHTML، مثل PDF والمستندات ← ترويسات HTTP من نوع
Link:؛ فلا خيار آخر لأن PDF لا يحتوي<head>. - لغات ومناطق كثيرة، أو مسار قائم لخرائط الموقع، أو إعداد headless/JAMstack ← خريطة موقع XML تُولد برمجيًا.
تعرض عدسة أشجار القرار هذه الخيارات في مخطط تدفق فعلي.
2. مصدر حقيقة واحد. أيًا كانت الطريقة، يجب توليد الإشارات من موضع واحد: جدول اللغات والترجمات في قاعدة البيانات، أو حقل علاقات في CMS، أو جدول بيانات واحد للمواقع الصغيرة. وأسوأ نمط مضاد في hreflang هو صيانة الوسوم يدويًا لكل صفحة. ما إن ينحرف قالب لغة ومنطقة واحدة، تغيب روابط الإرجاع وتُسقط الأزواج.
3. لا تجمع الطرق. يمكنك تشغيل الطرق الثلاث كلها، لكن Google تقول إن لا فائدة في ذلك، وكل طريقة إضافية سطح آخر قد تختلف فيه النسخ الثلاث بعضها عن بعض.
Evidence for this claim Google requires fully qualified alternate URLs and reciprocal links, and recommends including each page itself in its alternate set. Scope: Google Search hreflang rules shared by all delivery methods. Confidence: high · Verified: Google: Hreflang guidelinesالطريقة 1 — وسوم HTML من نوع <link> داخل <head>
الصياغة، كما توردها Google حرفيًا:
<link rel="alternate" hreflang="lang_code" href="url_of_page" />مجموعة عملية كاملة لعنقود متعدد اللغات والمناطق مع خيار احتياطي:
<link rel="alternate" hreflang="en-us" href="https://example.com/us/" />
<link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />توضع هذه الكتلة نفسها على كل صفحة في العنقود، أي الصفحة الأمريكية والبريطانية والألمانية والصفحة الرئيسية، وتضم كل منها سطر الإشارة الذاتية الخاص بها. وهذا ما يحقق التبادلية.
الموضع قاعدة صارمة. تقول Google: “The <link> tags must be inside a well-formed <head> section of the HTML.” (الترجمة العربية) «يجب أن تكون وسوم <link> داخل قسم <head> سليم البنية في HTML». وتنصح عند استكشاف المشكلات: “If in doubt, paste code from your rendered page into an HTML validator to ensure that the links are inside the <head> element.” (الترجمة العربية) «عند الشك، الصق شيفرة الصفحة المعروضة في مدقق HTML للتأكد من وجود الروابط داخل عنصر <head>».
هذا أهم مما يبدو بسبب حالة إخفاق تتجاوزها معظم الأدلة المكتوبة: قد تُدفع وسوم hreflang خارج <head> إلى <body>، فتغدو غير صالحة. أشرت إلى ذلك مباشرة في شرائح Pubcon Vegas لعام 2019. لا يمكن للوسوم أن تقع في body بصورة مشروعة، وإلا استطاع موقع اختطاف بدائل موقع آخر؛ لكن وسم <p> مشوهًا أو محقونًا أو iframe قد يغلق <head> مبكرًا، فيُعرض كل ما بعده، بما فيه hreflang، داخل <body>. يكون الوسم موجودًا تقنيًا في المصدر لكنه غير صالح بصمت. وأسرع طريقة لتصحيح ذلك نقاط توقف DOM في المتصفح: راقب موضع الوسوم الفعلي في DOM المعروض، ثم ارجع إلى الترميز الذي كسر <head>.
تناسب وسوم HTML المواقع الصغيرة والمتوسطة ذات العدد المقبول من اللغات والمناطق، حيث لا تتضخم كتلة <link> في كل صفحة. أما الموقع الذي يضم عشرات اللغات والمناطق فتحمل كل صفحة فيه كتلة ترميز كبيرة، وهذا أحد أسباب اعتماد المواقع الكبيرة على طريقة خريطة الموقع.
لا تمزج hreflang مع سمات alternate أخرى في عنصر <link> نفسه. توضح إرشادات Google أن <link rel="alternate"> الذي يحمل hreflang يجب ألا يحمل سمة بديلة غير ذات صلة مثل media في الوسم نفسه. إذا احتجت إلى بديل لغة/منطقة وبديل استعلام وسائط للعنوان نفسه، فاستخدم عنصري <link> منفصلين، لا عنصرًا واحدًا مدمجًا. يسهل أن ينتج عن المزج وسم لا تستطيع Google تحليله لأي من الغرضين.
الطريقة 2 — ترويسات HTTP من نوع Link:
المعلومات نفسها، لكنها تُرسل في استجابة HTTP بدل HTML. الصياغة:
Link: <https://example.com/file.pdf>; rel="alternate"; hreflang="en",
<https://de-ch.example.com/file.pdf>; rel="alternate"; hreflang="de-ch"لاحظ الأقواس الزاوية حول كل عنوان URL، والسمات المفصولة بفواصل منقوطة، والفاصلة التي تفصل كل بديل. يُلحق كل عنوان URL في الترويسة بفاصلة.
متى تحتاج إليها: للموارد غير المكتوبة بـHTML. لا يحتوي PDF أو ملف .doc أو صورة تُخدم مباشرة على <head> يحمل وسوم <link>، ولذلك تكون الترويسة وسيلتك الوحيدة لربط hreflang بها.
اعتبارات الإعداد: تضبط هذه الترويسات في طبقة الخادم أو CDN، مثل تعليمة Apache من نوع Header، أو add_header في Nginx، أو قاعدة ترويسة استجابة في Cloudflare/Fastly/CloudFront، أو استجابة التطبيق. ولأن البنية التحتية تضبط الترويسة بدل ترميز كل مستند، يسهل كسر قاعدة التبادلية هنا؛ فعادة ما تُضبط ترويسة PDF الإنجليزي والألماني بصورة منفصلة. لذلك عليك التأكد من أن كل واحدة تسرد المجموعة كاملة، بما فيها نفسها. اجعل توليد الترويسة معتمدًا على جدول اللغات والمناطق نفسه المستخدم في HTML أو خريطة الموقع.
الثابت الذي يجب الحفاظ عليه: تحمل كل استجابة بديلة المجموعة الكاملة المتطابقة في كل مرة. لا يكفي أن تسرد ترويسة PDF الإنجليزي البديل الألماني؛ بل يجب أن تحمل استجابة PDF الألماني المجموعة نفسها في الاتجاه المعاكس، أي نفسه وكل بديل آخر، في كل استجابة لا أول استجابة يصادفها الزاحف وحدها. تعامل مع الترويسة كمخرج مولد، لا إعداد منفرد تضبطه ثم تنساه.
الطريقة 3 — إشارات <xhtml:link> في خريطة موقع XML
على نطاق واسع يكون هذا عادة الاختيار الصحيح: يعيش العنقود كله في ملف أو بضعة ملفات تولدها الآلة، ولا يتضخم <head> في كل صفحة، ولأن رسم العلاقات كله في موضع واحد تكون هذه أسهل طريقة بفارق كبير لضمان الجودة. الصياغة:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://www.example.com/english/page.html</loc>
<xhtml:link rel="alternate" hreflang="de"
href="https://www.example.de/deutsch/page.html"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://www.example.com/english/page.html"/>
</url>
<url>
<loc>https://www.example.de/deutsch/page.html</loc>
<xhtml:link rel="alternate" hreflang="de"
href="https://www.example.de/deutsch/page.html"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://www.example.com/english/page.html"/>
</url>
</urlset>أمران يوقعان الناس في الخطأ عند استخدام خريطة الموقع:
- إعلان نطاق الأسماء إلزامي. لا يمثل
xmlns:xhtml="http://www.w3.org/1999/xhtml"في عنصر<urlset>زخرفة اختيارية؛ إذا حذفته أصبح كل<xhtml:link>في الملف غير صالح. - يجب أن تكون كل كتلة
<url>مكتملة ذاتيًا. لاحظ أن كتلتي<url>أعلاه تسردان البديلين مع<loc>الخاص بكل منهما. يحمل كل مدخل<url>المجموعة الكاملة: الإشارة الذاتية وكل البدائل. والتبادلية في خريطة الموقع تعني ببساطة أن «تسرد كتلة كل عنوان URL جميع عناوين URL في العنقود، بما فيها نفسها».
هناك سلوكان يفيد فهمهما كي لا تبالغ في هندسة المولد: لا تبالي Google بترتيب أبناء <xhtml:link> داخل كتلة <url>، فلا تهدر الوقت في فرزها، كما لا تُحتسب إشارات <xhtml:link> ضمن حد خريطة الموقع البالغ 50 000 عنوان URL لكل ملف؛ لأنها أبناء مدخل <url> وليست مدخلات <url> مستقلة.
التوليد برمجيًا. الهدف كله من طريقة خريطة الموقع أن تكون نتيجة ثانوية لبيانات الترجمة في CMS. إذا كان CMS يعرف مسبقًا أن /english/page.html و/deutsch/page.html ترجمتان إحداهما للأخرى، فعلى مولد خريطة الموقع اجتياز جدول العلاقات وإصدار كتل <xhtml:link> وقت البناء أو عند طلب الخريطة. عندئذ لا يستطيع hreflang الانحراف عن الواقع؛ إذ يُعاد توليده من مصدر الحقيقة كل مرة، وتصبح إضافة لغة ومنطقة تغييرًا في البيانات لا تعديلًا يدويًا عبر مئات الصفحات.
للفرق التي لا تملك موارد تطوير، أنشأت قالب Google Sheets خفيفًا في دليل Ahrefs لـhreflang: تبويب Setup لاختيار لغة افتراضية وما يصل إلى أربعة بدائل، وتبويب URLs للصق عناوين كل لغة في أعمدة، وتبويب Results يولد كتلة XML لخريطة الموقع تلقائيًا. إنه تجسيد لفكرة «مصدر حقيقة واحد» في المواقع التي لا تبرر تكاملًا حقيقيًا مع CMS.
القواعد التي تنطبق أيًا كانت الطريقة
هذه القواعد مستقلة عن الطريقة ولا تقبل التفاوض.
- الإشارة الذاتية. تسرد كل صفحة، أو كتلة
<url>، أو ترويسة نفسها. يصف Mueller ذلك بأنه اختياري لكنه ممارسة جيدة، وقد غاب في 18,0 % من النطاقات في دراستي؛ أتمته فلا يكلفك شيئًا. - التبادلية. “Each language version must list itself as well as all other language versions.” (الترجمة العربية) «يجب أن تسرد كل نسخة لغوية نفسها وسائر النسخ اللغوية». وتوضح Google التنفيذ: “If two pages don’t both point to each other, the tags will be ignored. This is so that someone on another site can’t arbitrarily create a tag naming itself as an alternative version of one of your pages.” (الترجمة العربية) «إذا لم تشر الصفحتان كل منهما إلى الأخرى، فستُتجاهل الوسوم. يمنع ذلك شخصًا في موقع آخر من إنشاء وسم اعتباطيًا يسمي موقعه نسخة بديلة من إحدى صفحاتك». يسقط رابط إرجاع واحد مفقود الزوج.
- عناوين URL مطلقة ومكتملة. “Alternate URLs must be fully-qualified, including the transport method (http/https)” (الترجمة العربية) «يجب أن تكون عناوين URL البديلة مكتملة، بما فيها طريقة النقل (http/https)»؛ أي
https://example.com/fooلا//example.com/fooأو/foo. ويجب أن يطابق URL بدقة الشكل الذي تفهرسه Google: البروتوكول وwwwوالشرطة المائلة الختامية وحالة الأحرف، وإلا أخفقت مطابقة رابط الإرجاع.
استخدام الرموز الصحيحة
تبدأ سمة hreflang برمز اللغة وفق ISO 639-1، وقد يتبعه رمز اختياري للمنطقة وفق ISO 3166-1 Alpha 2. اجمعهما بشرطة: en-US. يمكنك استهداف لغة وحدها (es تعني الإسبانية في كل مكان)، لكن لا يمكنك استهداف منطقة وحدها؛ فاللغة تأتي أولًا دائمًا.
الأخطاء التي أراها أكثر من غيرها، وظهرت كذلك في بيانات الدراسة:
en-UKبدلen-GB؛ فـukتعني الأوكرانية ورمز منطقة المملكة المتحدة هوgb.jpبدلjaلليابانية، وcnبدلzhللصينية.- رموز من ثلاثة أحرف (
gerوeng) حيث يلزم رمز ISO 639-1 من حرفين. - استخدام
EUأوUNأوUKرموزًا للمناطق؛ فلا يمثل أي منها هدفًا صالحًا وفق ISO 3166-1 alpha-2.
x-default هو القيمة المحجوزة للخيار الاحتياطي، مثل محدد لغة أو صفحة رئيسية تعيد التوجيه تلقائيًا وتخدم المستخدمين الذين لا يطابقون أيًا من اللغات والمناطق الصريحة:
<link rel="alternate" href="https://example.com/" hreflang="x-default" />إنه غير إلزامي. كان العنصر الأكثر غيابًا في دراستي، إذ حذفته 56,3 % من النطاقات، لكن غياب x-default لا يكسر العنقود مثل غياب وسم تبادلي؛ بل تعود Google إلى اكتشاف اللغة والمنطقة بنفسها للمستخدمين غير المطابقين. أضفه على أي حال؛ فهو بند في قائمة التحقق لا ما يكسر العنقود. ويوجد موضوع فرعي مخصص لـx-default في هذا العنقود.
التنفيذ على نطاق واسع — أساليب CMS والمنصات
WordPress. لا يولد Yoast SEO وسوم hreflang بمفرده. لإخراج الوسوم فعليًا تحتاج إلى إضافة متعددة اللغات مثل WPML أو Polylang. يولد WPML hreflang تلقائيًا لكل صفحة لها ترجمات، ويضيف x-default يشير إلى نسخة اللغة الافتراضية، ويدرج الإشارات افتراضيًا في خريطة موقع XML. ويوجد إعداد في WPML ← Languages ← SEO Options باسم “Display alternative languages in the HEAD section” إذا أردت إخراج وسوم الرأس بدل خريطة الموقع أو إضافة إليها. راجع وثائق WPML لاستخدامه مع
Yoast.
Shopify. يولد Shopify Markets وسوم hreflang مترابطة تبادليًا تلقائيًا بعد إعداد الأسواق واللغات ونشر المحتوى وربطه في التنقل، فيزيل بتصميمه أكثر حالات الإخفاق شيوعًا، وهي غياب الروابط المتبادلة. لكن وسوم Markets التلقائية تكون غالبًا للغة فقط (fr وde) لا للغة والمنطقة (fr-FR وfr-CA)، وهذا لا يكفي للعلامات التي تحتاج تحديدًا إقليميًا، مثل الفرنسية لفرنسا وكندا وبلجيكا. عندئذ تستخدم وسوم <link> يدوية في theme.liquid، وتعرض وثائق Shopify لـhreflang في القالب النمط، أو تستخدم تطبيقًا. انتبه لأن مزج وسوم Markets التلقائية مع الوسوم اليدوية أو وسوم التطبيق مصدر موثق للتعارض. اختر طريقة واحدة.
مخصص / headless / مؤسسات. ولّد الإشارات من جدول علاقات الترجمة وقت البناء أو الخدمة، كما في قسم خريطة الموقع أعلاه. إنه مبدأ «مصدر حقيقة واحد» نفسه؛ إذ يصبح hreflang مخرجًا محسوبًا من بيانات يحملها CMS بالفعل، لا أثرًا يُصان يدويًا ويتدهور.
أخطاء تنفيذ تكسر العنقود
إعادة التوجيه التلقائية حسب الموقع الجغرافي/IP. هذا إخفاق مختلف عن أخطاء الصياغة وهو أسوأ. إذا أعدت توجيه الزوار، ولا سيما الزواحف، إلى نسخة استنادًا إلى الموقع المتوقع، فقد تزيل عناقيد إقليمية كاملة من الفهرسة لأن Googlebot يزحف غالبًا من الولايات المتحدة. وكما قلت في شرائح Pubcon: “would redirect search engines to where they crawl from. Google for instance mostly crawls from the US so we would effectively de-index all geo pages.” (الترجمة العربية) «سيعيد ذلك توجيه محركات البحث إلى المكان الذي تزحف منه؛ فـGoogle مثلًا تزحف غالبًا من الولايات المتحدة، ولذلك سنزيل فعليًا كل الصفحات الجغرافية من الفهرسة». وهناك جانب تنظيمي أيضًا، هو التعرض المحتمل لقواعد الاتحاد الأوروبي المناهضة للحجب الجغرافي. النمط الصحيح هو أعد توجيه المستخدمين ولا تعِد توجيه الزواحف قط: اكتشف الزوار البشر وأعد توجيههم اختياريًا، لكن دع الروبوتات تصل إلى كل نسخة URL مباشرة، واجعل hreflang يحمل إشارة التوجيه. توصي إرشادات Google للمواقع متعددة المناطق بشريط اقتراح غير مزعج بدل إعادة التوجيه التلقائية لهذا السبب تحديدًا.
توجيه hreflang إلى عناوين URL غير أساسية أو معاد توجيهها أو تحمل noindex. إذا تغير عنوان لغة ومنطقة وأضيفت إعادة التوجيه لكن hreflang ظل يشير إلى العنوان القديم، أصبح العنقود يشير إلى 301 أو 404؛ وقد أشارت 16,9 % من النطاقات في دراستي إلى صفحات معطلة أو معاد توجيهها. وبالمثل يجب أن تجعل كل نسخة نفسها رابطًا أساسيًا؛ فتوجيه hreflang إلى عنوان تستبعده عملية تحديد الأساسي، أو إلى صفحة تحمل noindex، يكسر رابط الإرجاع، وقد أشارت 8,0 % إلى عناوين غير أساسية.
صيغ URL غير المتسقة. يجب أن يتطابق عنوان hreflang والعنوان المفهرس بايتًا ببايت في الشكل، بما فيه الشرطة المائلة الختامية وwww والبروتوكول وحالة الأحرف. يؤدي عدم التطابق إلى إخفاق صامت في التبادلية.
التحقق من التنفيذ بعد الإطلاق
اعرض المصدر المعروض، لا المصدر الخام وحده. إذا حقنت JavaScript وسوم hreflang، فلن يعرض curl أو Ctrl+U، أي “View Page Source”، شيئًا، لكن الوسوم موجودة في DOM المعروض. أكد ذلك عبر GSC URL Inspection ← “Test Live URL” ← “View Tested Page”، أو باستخدام زاحف قادر على العرض. وهذا أكثر سبب يجعل شخصًا يقول «وسومي مفقودة» وهي سليمة، أو العكس: موجودة في المصدر لكنها معطلة لأنها تُعرض داخل <body>.
ازحف إلى العنقود كله ولا تفحص عنوان URL واحدًا. التبادلية علاقة بين الصفحات، ولذلك لا يخبرك فحص صفحة واحدة إلا بالقليل. شغّل زاحفًا عبر العنقود كله، مثل تدقيق hreflang في Screaming Frog أو Ahrefs Site Audit، لاكتشاف وسوم الإرجاع المفقودة والأهداف غير الأساسية والمراجع المعطلة على نطاق واسع. يرسم تبويب Hreflangs في Ahrefs Site Audit العنقود كرسم بياني بروابط معطلة حمراء، وهو أسهل بكثير في الفهم من CSV.
تحقق من نتائج البحث الحقيقية باستخدام &hl= و&gl=. ألحق معاملي لغة المضيف (&hl=) والموقع الجغرافي (&gl=) بعنوان بحث Google لمعاينة شكل نتائج لغة ومنطقة بعينها فعليًا بدل التخمين من موقعك.
التحقق ليس خطوة لمرة واحدة. اللغات والمناطق الجديدة وتغييرات URL أو إعادة التوجيه وتسرب إعدادات التطوير/الاختبار/التجهيز إلى الإنتاج أسباب متكررة للأعطال بعد الإطلاق. أدرج فحوص hreflang في اختبارات الانحدار وعمليات الزحف الدورية، لا في ضمان جودة يوم الإطلاق وحده. وصفت ذلك في المحاضرات: “any number of things can break from masking to things carrying over from dev/test/staging environments.” (الترجمة العربية) «قد يتعطل أي عدد من الأشياء، بدءًا من الإخفاء ووصولًا إلى ما ينتقل من بيئات التطوير والاختبار والتجهيز».
خرافات ينبغي إحالتها إلى التقاعد
- «تعالج خرائط الموقع أسرع من وسوم HTML». خطأ. يُحل كلاهما وقت الزحف، وقد دحضت ذلك مباشرة. ميزة خريطة الموقع هي سهولة الصيانة وضمان الجودة، لا السرعة.
- «لا تدعم Yandex hreflang في خرائط الموقع». خطأ؛ تؤكد وثائق Yandex دعم hreflang في خرائط الموقع.
- «استخدم الطرق الثلاث للحصول على إشارة إضافية». لا فائدة وفق Google، وهذا يضاعف فقط مخاطر عدم الاتساق.
- «غياب
x-defaultيكسر العنقود». خطأ؛ فهو اختياري وتعود Google إلى اكتشافها الخاص. - «hreflang الخاطئ يعرضك لعقوبة». خطأ؛ إنه تلميح لا توجيه ملزم. يُتجاهل hreflang المعطل ولا يعاقب عليه.
إلى أين تنتقل بعد ذلك
هذا المقال هو العمق العملي تحت مركز hreflang؛ يغطي المركز ماهية hreflang وأهمية التبادلية وما تستخدمه Bing بدلًا منه. ويتعمق موضوع x-default الفرعي في القيمة الاحتياطية. وللاستراتيجية التي ينفذها ذلك، راجع ركيزة SEO الدولي؛ فـhreflang هو الطبقة التقنية لا بديلًا من التوطين الحقيقي.
ملخص الذكاء الاصطناعي
خلاصة مكثفة للنسخة المتقدمة:
- ثلاث طرق، اختر واحدة بالضبط؛ تعاملها Google بالتساوي ولا فائدة من جمعها:
- وسوم HTML من نوع
<link>داخل<head>— للمواقع الصغيرة والمتوسطة؛ يجب أن تقع في<head>سليم البنية لا<body>، ولا تمزجhreflangبسمة alternate أخرى مثلmediaفي عنصر<link>نفسه. - ترويسات HTTP من نوع
Link:— الخيار الوحيد للملفات غير المكتوبة بـHTML مثل PDF؛ تضبط في الخادم/CDN، ويجب أن تحمل كل استجابة بديلة المجموعة الكاملة المتطابقة في كل مرة. <xhtml:link>في خريطة موقع XML — الأنسب على نطاق واسع؛ تحتاج إلى نطاق الأسماءxmlns:xhtml="http://www.w3.org/1999/xhtml"في<urlset>، وهي الأسهل في ضمان الجودة لأن الرسم كله في ملف واحد. لا يهم ترتيب الأبناء ولا تُحتسب ضمن حد 50 000 عنوان URL لخريطة الموقع.
- وسوم HTML من نوع
- قاعدتان عامتان: الإشارة الذاتية، أي تسرد كل صفحة نفسها، والتبادلية، أي تتطلب A→B وجود B→A وإلا تجاهلت Google الزوج. استخدم عناوين URL مطلقة ومكتملة تطابق الشكل المفهرس بدقة.
- الرموز: لغة ISO 639-1 مع منطقة اختيارية وفق ISO 3166-1 alpha-2 (
en-GBلاen-UK، وjaلاjp). يمثلx-defaultالخيار الاحتياطي المحجوز، وهو اختياري لكنه العنصر الأكثر غيابًا بنسبة 56,3 % في دراستي. - أتمت من مصدر حقيقة واحد. يحتاج WordPress إلى WPML/Polylang ولا يفعل Yoast شيئًا بمفرده؛ يولد Shopify Markets وسومًا تبادلية تلقائيًا لكنها غالبًا للغة وحدها؛ وعلى الأنظمة المخصصة/headless إخراج hreflang من جدول الترجمات.
- لا تعِد توجيه الزواحف تلقائيًا حسب الموقع الجغرافي؛ يزحف Googlebot غالبًا من الولايات المتحدة وقد تزيل العناقيد الإقليمية من الفهرسة. أعد توجيه المستخدمين لا الروبوتات.
- تحقق من الرأس المعروض لا مصدر الصفحة وحده، لأن الوسوم المحقونة بـJavaScript لا تظهر في المصدر؛ وازحف إلى العنقود كله للتحقق من التبادلية، وافحص اللغات والمناطق بـ
&hl=و&gl=، وأعد التحقق بعد كل تغيير في URL.
الوثائق الرسمية
وثائق من المصادر الأولية لتنفيذ hreflang.
- النسخ الموطنة من صفحاتك — وثيقة التنفيذ الأساسية: الطرق الثلاث بصياغتها الدقيقة، وشرط التبادلية، والرموز الصالحة، وقاعدة عنوان URL المطلق، و
x-default. - إدارة المواقع متعددة المناطق واللغات — خيارات بنية URL وتنبيه إعادة التوجيه التلقائية/الإخفاء، وهو سبب عدم إعادة توجيه الزواحف جغرافيًا.
- إبلاغ Google بالنسخ الموطنة، تدوينة x-default لعام 2013 — التقديم الأصلي لـ
x-default. - إهمال تقرير International Targeting في سبتمبر 2022 — اختفى التقرير القديم وما زالت وسوم hreflang تعمل.
Bing / Microsoft
- إرشادات Bing لمشرفي المواقع — إرشادات Bing؛ لاحظ أنها تعتمد على
content-languageو<html lang>أكثر من hreflang. - سلسلة Bingbot: تعظيم كفاءة الزحف — سياق تعامل Bing مع المواقع الدولية ومتعددة اللغات.
CMS / المنصة
- WPML — استخدام WordPress SEO (Yoast) مع WPML — كيفية إخراج WPML لـhreflang، وإعداد الرأس مقابل خريطة الموقع.
- Shopify — إضافة وسوم hreflang في القالب — نمط
<link>اليدوي فيtheme.liquid.
اقتباسات من المصدر
تصريحات مسجلة متصلة بالتنفيذ. كل رابط لوثائق Google ينتقل إلى المقطع المقتبس في الصفحة المنشورة.
Google — الطرق الثلاث
- “The three methods are equivalent from Google’s perspective and you can choose the method that’s the most convenient for your site.” (الترجمة العربية) «الطرق الثلاث متكافئة من منظور Google، ويمكنك اختيار الطريقة الأنسب لموقعك». — وثائق Google Search Central. انتقل إلى الاقتباس
Google — الموضع
- “The
<link>tags must be inside a well-formed<head>section of the HTML.” (الترجمة العربية) «يجب أن تكون وسوم<link>داخل قسم<head>سليم البنية في HTML». — وثائق Google Search Central. انتقل إلى الاقتباس
Google — القاعدتان
- “Each language version must list itself as well as all other language versions.” (الترجمة العربية) «يجب أن تسرد كل نسخة لغوية نفسها وسائر النسخ اللغوية». — وثائق Google Search Central. انتقل إلى الاقتباس
- “If two pages don’t both point to each other, the tags will be ignored.” (الترجمة العربية) «إذا لم تشر الصفحتان كل منهما إلى الأخرى، فستُتجاهل الوسوم». — وثائق Google Search Central. انتقل إلى الاقتباس
- “Alternate URLs must be fully-qualified, including the transport method (http/https).” (الترجمة العربية) «يجب أن تكون عناوين URL البديلة مكتملة، بما فيها طريقة النقل (http/https)». — وثائق Google Search Central. انتقل إلى الاقتباس
Google — الرموز
- “The first code of the hreflang attribute is the language code (in ISO 639-1 format) followed by an optional second code that represents the region code (in ISO 3166-1 Alpha 2 format).” (الترجمة العربية) «الرمز الأول في سمة hreflang هو رمز اللغة بصيغة ISO 639-1، ويتبعه رمز ثانٍ اختياري يمثل المنطقة بصيغة ISO 3166-1 Alpha 2». — وثائق Google Search Central. انتقل إلى الاقتباس
John Mueller من Google — إنه تلميح لا توجيه ملزم
- عن وسوم الإشارة الذاتية: تُنقل إشارة hreflang الذاتية بوصفها اختيارية لكنها ممارسة جيدة. — John Mueller من Google، كما أورده دليل Ahrefs لـhreflang.
- عن أن صحة التنفيذ لا تضمن النتيجة، في Bluesky في مايو 2025: أشار Mueller إلى أن hreflang لا يضمن الفهرسة، ولذلك قد لا تُفهرس إحدى النسخ، وأن النسخ المتقاربة باللغة نفسها، مثل
fr-frوfr-be، كثيرًا ما تُدمج. — كما أوردت تغطية Search Engine Journal.
أي طريقة تنفيذ ينبغي أن أستخدم؟
اعمل من الأعلى إلى الأسفل وتوقف عند أول تطابق.
1. هل الصفحات ملفات غير مكتوبة بـHTML، مثل PDF أو المستندات أو الصور المخدّمة مباشرة؟
← نعم ← ترويسات HTTP من نوع Link:. لا تحتوي <head>، ولذلك فهذا خيارك الوحيد. اضبط الترويسة في الخادم/CDN واسرد المجموعة كلها في كل ملف.
← لا ← تابع.
2. هل لديك أكثر من بضعة إعدادات للغة والمنطقة، أو مسار قائم لخرائط الموقع، أو بناء headless/JAMstack؟
← نعم ← <xhtml:link> في خريطة موقع XML. ولّدها برمجيًا من جدول الترجمات. ملف واحد تولده الآلة، بلا ترميز لكل صفحة، وهو الأسهل في ضمان الجودة.
← لا ← تابع.
3. موقع صغير أو بسيط، ولغات ومناطق قليلة، وتفضل إبقاء كل شيء ظاهرًا في الصفحة؟
← وسوم HTML من نوع <link> داخل <head>. تأكد فقط من توليد الكتلة من مصدر حقيقة واحد ووقوعها داخل <head> سليم البنية.
أيًا كان اختيارك: استخدمه وحده. تقول Google إن لا فائدة من جمع الطرق، وكل نسخة إضافية موضع قد تختلف فيه الطرق الثلاث.
هل أحتاج إلى x-default؟
هل لديك صفحة تخدم مَن لا يطابقون أيًا من لغاتك ومناطقك الصريحة، مثل محدد بلد/لغة أو صفحة رئيسية عالمية؟
← نعم ← أضف x-default وأشر إلى الصفحة الاحتياطية.
← لا ← يمكنك تجاوزه. إنه اختياري؛ وتعود Google إلى اكتشافها الخاص. لن يكسر العنقود، بخلاف وسم تبادلي مفقود. وتظل إضافته ممارسة جيدة؛ فقد كان العنصر الأكثر غيابًا في دراستي بنسبة 56,3 %.
هل ينبغي أن أعيد توجيه المستخدمين تلقائيًا حسب الموقع؟
هل تفكر في إعادة التوجيه وفق IP/الموقع الجغرافي؟ ← أعد توجيه الزوار البشر وحدهم، ويفضل عرض شريط غير مزعج بدل إعادة توجيه صارمة. ← لا تعِد توجيه الزواحف جغرافيًا قط. يزحف Googlebot غالبًا من الولايات المتحدة، ولذلك قد تزيل إعادة التوجيه الجغرافية للزاحف نسخك الإقليمية الأخرى من الفهرسة، كما تخاطر بتصنيف الإخفاء والتعرض لقواعد الاتحاد الأوروبي المناهضة للحجب الجغرافي. دع الروبوتات تصل مباشرة إلى كل نسخة URL؛ فـhreflang يحمل إشارة التوجيه.
أي مسار CMS ينطبق عليّ؟
- WordPress؟ ← لا يفعل Yoast وحده شيئًا. ثبّت WPML أو Polylang؛ فهما يخرجان hreflang، ويمكن اختيار إخراج الرأس أو خريطة الموقع في إعدادات SEO لـWPML.
- Shopify؟ ← يولد Markets وسومًا تبادلية تلقائيًا، لكنها غالبًا للغة وحدها. هل تحتاج
fr-FRمقابلfr-CA؟ أضف وسومًا يدوية فيtheme.liquidأو تطبيقًا، ولا تمزج الطريقتين لتجنب التعارض. - مخصص / headless؟ ← أخرج
<xhtml:link>أو وسوم الرأس من جدول علاقات الترجمة وقت البناء أو الخدمة.
إجراء التشغيل القياسي: نشر عنقود hreflang من الصفر
إجراء قابل للتكرار لإضافة عنقود hreflang جديد، أو لغة ومنطقة جديدة إلى عنقود قائم. نفذه من الأعلى إلى الأسفل.
1. ابنِ مصفوفة اللغات والمناطق، وهي مصدر الحقيقة الواحد.
اسرد كل عنوان URL ورمز لغته ومنطقته في موضع واحد: جدول قاعدة بيانات أو حقل ترجمة في CMS أو جدول بيانات. تأكد من أن كل عنوان هو الشكل الأساسي والمفهرس، بالبروتوكول وwww والشرطة المائلة وحالة الأحرف الصحيحة. هذا الجدول مدخل كل ما يلي، ولا يُكتب شيء يدويًا بعده.
2. اختر طريقة واحدة باستخدام عدسة أشجار القرار. لا تجمع الطرق.
3. ولّد الإشارات من المصفوفة.
- HTML: أخرج كتلة
<link>في<head>كل صفحة من المصفوفة. - خريطة الموقع: أخرج كل كتلة
<url>مع نطاق الأسماءxmlns:xhtmlفي<urlset>. - الترويسات: أخرج ترويسة
Link:من المصفوفة في الخادم/CDN.
4. تحقق برمجيًا من القاعدتين قبل النشر. يجب أن يتضمن كل مدخل (أ) إشارة ذاتية و(ب) كل مدخل آخر في العنقود. أكد التبادلية: لكل A→B توجد B→A مطابقة.
5. أضف x-default إذا كانت لديك صفحة محدد أو صفحة احتياطية عالمية.
6. انشر ثم تحقق من المخرج المعروض، وراجع عدسة أدلة التشغيل للتفاصيل: الرأس المعروض لا مصدر الصفحة، وزحف كامل للعنقود للتحقق من التبادلية، وفحص موضعي لنتائج البحث عبر &hl= و&gl=.
7. أدرجه في الفحوص المستمرة. أضف زحفًا دوريًا أو اختبار انحدار كي لا يؤدي تغيير URL أو لغة ومنطقة جديدة مستقبلًا إلى إفساد وسم إرجاع بصمت. التحقق ليس مهمة لمرة واحدة.
عند إضافة لغة ومنطقة لاحقًا: عدّل المصفوفة وحدها، أي الخطوة 1، وأعد تشغيل الخطوات 3–6. إذا كنت تعدّل صفحات منفردة يدويًا لإضافة لغة، فمصدر حقيقتك خاطئ؛ أصلحه أولًا.
دليل التشغيل: «hreflang لا يعمل» — مسار التحقق
نفذ الخطوات بالترتيب. تكشف كل خطوة موضع العطل أو تستبعد سببًا مشتبهًا به.
الخطوة 1 — أكد أن الوسوم تُعرض فعلًا. افتح الصفحة واعرض DOM المعروض، عبر GSC URL Inspection ← Test Live URL ← View Tested Page، أو زاحف قادر على العرض. لا تعتمد على Ctrl+U أي View Page Source؛ فإذا حُقن hreflang بـJavaScript فلن يظهر هناك رغم أنه حي.
- الوسوم موجودة في الرأس المعروض ← انتقل إلى الخطوة 3.
- الوسوم غائبة عن الرأس المعروض ← الخطوة 2.
الخطوة 2 — هل تقع الوسوم في <head> أم <body>؟
إذا كانت الوسوم موجودة في المصدر لكنها داخل <body> فهي غير صالحة. يُرجح أن وسم <p> مشوهًا أو محقونًا أو iframe أغلق <head> مبكرًا. استخدم نقاط توقف DOM للعثور على موضع كسر <head>، وأصلح الترميز ثم أعد الفحص.
الخطوة 3 — تحقق من أن عناوين URL مطلقة وأساسية.
يجب أن يكون كل href مكتملًا (https://…) ومطابقًا بايتًا ببايت للشكل المفهرس، بما فيه البروتوكول وwww والشرطة المائلة وحالة الأحرف. تأكد من أن لا عنوان يشير إلى 301 أو 404 أو صفحة تحمل noindex أو مستبعدة لصالح رابط أساسي آخر.
الخطوة 4 — تحقق من التبادلية عبر العنقود كله. ازحف إلى العنقود كاملًا باستخدام Screaming Frog أو Ahrefs Site Audit. لكل A→B، تحقق من وجود B→A مطابقة ومن إشارة كل صفحة إلى نفسها. هنا تقع معظم الأعطال؛ فوسم إرجاع واحد مفقود يسقط الزوج.
الخطوة 5 — تحقق من الرموز.
أكد لغة ISO 639-1 ومنطقة ISO 3166-1 alpha-2. ابحث تحديدًا عن en-UK الذي يجب أن يكون en-GB، وjp الذي يجب أن يكون ja، والرموز الثلاثية، ورموز المنطقة وحدها.
الخطوة 6 — استبعد عمليات إعادة التوجيه الجغرافية. تأكد من أن الزواحف لا تُعاد توجيهها جغرافيًا. إذا دُفعت Googlebot، التي تزحف من الولايات المتحدة، إلى نسختك الأمريكية، فقد لا تصل إلى عناوينك الإقليمية الأخرى قط.
الخطوة 7 — اضبط التوقعات إذا كان العنقود صحيحًا تقنيًا.
إذا نجحت كل الفحوص أعلاه وظلت نسخ باللغة نفسها، مثل fr-fr وfr-be، مدمجة في التقارير، فهذا متوقع؛ فقد تدمج Google نسخًا شبه متطابقة باللغة نفسها بصرف النظر عن التنفيذ. hreflang تلميح لا توجيه ملزم، ولا يمثل الخطأ فيه أو تجاهله عقوبة. توقف عن ملاحقته بوصفه عطلًا.
أنماط تنفيذ مضادة
أخطاء ملموسة، وسبب خطئها، وما ينبغي فعله بدلًا منها.
1. صيانة hreflang يدويًا لكل صفحة. سبب الخطأ: ما إن ينحرف قالب أو لغة ومنطقة، تغيب وسوم الإرجاع وتسقط الأزواج؛ فتتعفن التبادلية على نطاق واسع. افعل بدلًا من ذلك: ولّد كل إشارة من مصدر حقيقة واحد، كجدول الترجمات أو حقل CMS أو قالب Sheets للمواقع الصغيرة، كي يُعاد توليد العنقود كله لا تعديله يدويًا.
2. استخدام الطرق الثلاث للحصول على «إشارة إضافية». سبب الخطأ: تقول Google إن لا فائدة، وثلاث نسخ من الحقيقة تعني ثلاث فرص للاختلاف. افعل بدلًا من ذلك: اختر طريقة واحدة واستخدمها وحدها.
3. إعادة توجيه الزواحف تلقائيًا حسب الموقع/IP. سبب الخطأ: يزحف Googlebot غالبًا من الولايات المتحدة، ولذلك قد تزيل إعادة توجيه جغرافية للزاحف عناقيدك الإقليمية الأخرى كليًا من الفهرسة، إلى جانب مخاطر الإخفاء وقواعد الاتحاد الأوروبي المناهضة للحجب الجغرافي. افعل بدلًا من ذلك: أعد توجيه المستخدمين وحدهم، أو الأفضل اعرض شريط اقتراح، ولا تعِد توجيه الزواحف. دع الروبوتات تصل إلى كل URL ودع hreflang يحمل الإشارة.
4. توجيه hreflang إلى عناوين URL غير أساسية أو معاد توجيهها أو تحمل noindex.
سبب الخطأ: يحل رابط الإرجاع إلى 301 أو 404 أو صفحة تحمل noindex، فينكسر الزوج؛ وقد أشارت 16,9 % إلى صفحات معطلة/معاد توجيهها و8,0 % إلى عناوين غير أساسية في دراستي.
افعل بدلًا من ذلك: تجعل كل نسخة نفسها رابطًا أساسيًا، ويشير hreflang إلى عناوين حية وأساسية وقابلة للفهرسة فقط، ويُعاد توليده عند تغير العناوين.
5. عناوين URL نسبية أو نسبية إلى البروتوكول.
سبب الخطأ: تشترط Google عناوين مكتملة؛ فـ/foo و//example.com/foo غير صالحين، وحتى الأشكال المطلقة غير المطابقة، مثل الشرطة أو www أو حالة الأحرف الخاطئة، تفشل في مطابقة التبادلية.
افعل بدلًا من ذلك: استخدم دائمًا https://example.com/foo مطابقًا الشكل المفهرس بدقة.
6. الوثوق بـView Page Source للتحقق.
سبب الخطأ: لا يظهر hreflang المحقون بـJavaScript في المصدر الخام؛ فتظنه مفقودًا وهو ليس كذلك، أو تفوت أنه يُعرض في <body> فيكون غير صالح.
افعل بدلًا من ذلك: تحقق من DOM المعروض عبر GSC URL Inspection أو زاحف قادر على العرض.
7. رموز لغات ومناطق خاطئة أو مخترعة.
سبب الخطأ: en-UK وjp وger والرموز الإقليمية وحدها غير صالحة وتُتجاهل.
افعل بدلًا من ذلك: لغة ISO 639-1 ومنطقة اختيارية ISO 3166-1 alpha-2: en-GB وja وde وes-MX.
قبل / بعد
1. وسم تبادلي مفقود، وهو المثال التقليدي. قبل: تسرد الصفحة الأمريكية US + UK + DE، لكن قالب الصفحة الألمانية لا يسرد إلا DE + US، فقد نسي رابط إرجاع UK. تسقط Google زوج DE↔UK. بعد: تسرد كتلة الصفحة الألمانية DE + US + UK، وكلها ذاتية وتبادلية. أُعيد توليدها من جدول اللغات والمناطق كي لا تنحرف مجددًا.
2. عناوين URL نسبية.
قبل: <link rel="alternate" hreflang="de" href="/de/" /> — نسبي، ولذلك فهو غير صالح ويُتجاهل.
بعد: <link rel="alternate" hreflang="de" href="https://example.com/de/" /> — مكتمل ويطابق الشكل المفهرس.
3. رمز المملكة المتحدة الخاطئ.
قبل: <link rel="alternate" hreflang="en-uk" href="https://example.com/uk/" /> — تعني uk الأوكرانية، ولذلك فالإشارة غير صالحة.
بعد: <link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />.
4. خريطة موقع تفتقد نطاق الأسماء.
قبل: تستخدم الخريطة مدخلات <xhtml:link> لكن <urlset> لا يعلن إلا نطاق أسماء خرائط الموقع الأساسي، فيكون كل <xhtml:link> غير صالح.
بعد: <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"> — أُعلن نطاق xhtml فأصبحت الإشارات صالحة.
مطالبات AI جاهزة للنسخ
كيّف العناصر النائبة ثم الصقها في المساعد الذي تختاره. تحقق دائمًا من المخرج مقابل زحف حقيقي؛ فقد يولد LLM رموزًا تبدو معقولة وهي خاطئة، أو يفوّت رابط إرجاع.
ولّد كتلة HTML داخل <head> من مصفوفة اللغات والمناطق
I have these language/region page variants:
- en-US: https://example.com/us/
- en-GB: https://example.com/uk/
- de: https://example.com/de/
- global fallback / selector: https://example.com/
For EACH page above, output the complete hreflang <link> block that belongs in its
<head>. Every block must (a) self-reference, (b) list all other variants, and
(c) include an x-default pointing at the fallback. Use fully-qualified https URLs
exactly as given. Validate the codes as ISO 639-1 language + ISO 3166-1 alpha-2
region and flag any that look wrong.حوّل المصفوفة نفسها إلى كتلة خريطة موقع XML
Using the same variant list, output an XML sitemap that uses <xhtml:link> hreflang
annotations. Requirements: declare xmlns:xhtml="http://www.w3.org/1999/xhtml" on
<urlset>; give every <url> block a full self-referencing + all-alternates set; use
the exact URLs provided. Do not add any URL not in my list.دقق عنقودًا ملصقًا بحثًا عن أخطاء التبادلية والرموز
Here are the hreflang tags from each page in my cluster: [paste each page's URL and
its hreflang tags]. Check for: missing self-reference, missing reciprocal (A->B
without B->A), invalid ISO codes, relative/protocol-relative URLs, and any URL that
appears with inconsistent formatting (trailing slash / www / case). List each issue
with the exact page and tag it's on. Do not assume tags I didn't paste. مقتطفات للاستخراج ووحدة التحكم والتوليد
أسطر عملية لبناء hreflang وفحصه. عدّل عناوين URL قبل التشغيل.
وحدة تحكم Chrome DevTools — اسرد وسوم hreflang في الصفحة الحالية الصق في Console، عبر F12 ← Console، بأي صفحة لترى ما عرضه المتصفح فعلًا؛ ويشمل ذلك الوسوم المحقونة بـJavaScript التي يفوتها View Source:
[...document.querySelectorAll('link[rel="alternate"][hreflang]')]
.map(l => ({ hreflang: l.hreflang, href: l.href,
inHead: !!l.closest('head') }));تكشف علامة inHead خلل كسر <head>؛ فأي وسم يعرض inHead: false يُعرض داخل <body> وهو غير صالح.
Bookmarklet — الفحص نفسه بنقرة واحدة احفظه إشارة مرجعية بهذا العنوان، ثم انقره في أي صفحة:
javascript:(()=>{const t=[...document.querySelectorAll('link[rel="alternate"][hreflang]')].map(l=>`${l.hreflang} ${l.href} ${l.closest('head')?'(head)':'(BODY - INVALID)'}`);alert(t.length?t.join('\n'):'No hreflang tags found');})();XPath — حدد روابط hreflang داخل الرأس لزاحف أو مفتش متصفح
//head/link[@rel='alternate' and @hreflang]إذا وجد الزاحف تطابقات link[@hreflang] تحت //body بدلًا منه، فهذا خلل كسر الرأس.
تعبير نمطي — استخرج رمز hreflang وURL من HTML الخام لفحص grep سريع لا كمحلل حقيقي
<link[^>]*rel=["']alternate["'][^>]*hreflang=["']([^"']+)["'][^>]*href=["']([^"']+)["']مجموعة الالتقاط 1 هي الرمز، والمجموعة 2 هي URL. استخدمه لفحص سريع فقط؛ حلل HTML الحقيقي بمكتبة DOM لا بتعبير نمطي.
curl — افحص hreflang في ترويسات استجابة HTTP من نوع Link: للملفات PDF/غير HTML
curl -sI https://example.com/file.pdf | grep -i '^link:'Python — ولّد كتلة hreflang داخل <head> متسقة ذاتيًا من مصفوفة
variants = {
"en-us": "https://example.com/us/",
"en-gb": "https://example.com/uk/",
"de": "https://example.com/de/",
"x-default": "https://example.com/",
}
# Every page gets the SAME full block (self-reference + all alternates),
# which is exactly what satisfies reciprocity.
block = "\n".join(
f'<link rel="alternate" hreflang="{code}" href="{url}" />'
for code, url in variants.items()
)
print(block) اختبر نفسك: تنفيذ hreflang
خمسة أسئلة سريعة عن بناء عنقود hreflang بناءً صحيحًا. اختر إجابة لكل سؤال ثم تحقق.
موارد تستحق وقتك
مقالات ذات صلة كتبتها
- Hreflang: الدليل السهل للمبتدئين — دليلي في Ahrefs وفيه الطرق الثلاث ومشكلات التنفيذ التسع الشائعة وإصلاحاتها وقالب Google Sheets لتوليد hreflang شبه آليًا على نطاق واسع.
- أكثر من 67 % من النطاقات التي تستخدم Hreflang لديها مشكلات — دراستي لـ374 756 نطاقًا، وهي الأكبر حتى الآن ومصدر توزيع معدلات الأخطاء: غياب x-default بنسبة 56,3 %، والإشارة الذاتية 18,0 %، والأهداف المعطلة/المعاد توجيهها 16,9 %، والتبادلية المفقودة 15,3 %، والعناوين غير الأساسية 8,0 %، والرموز السيئة 4,6 %.
محاضراتي
- SEO الدولي: الأجزاء التقنية الغريبة — Pubcon Vegas 2019 — أغنى مصدر للتنفيذ: خلل كسر
<head>ودفع الوسوم إلى<body>بواسطة iframe/ترميز مشوه، وتصحيحه بنقاط توقف DOM، وسبب خطأ خرافة «خرائط الموقع أسرع»، ومخاطر إزالة الفهرسة بإعادة التوجيه الجغرافي، وتقنية فحص SERP بـ&hl=و&gl=. - دراسة Hreflang ومشكلات مثيرة للاهتمام — Brighton SEO 2023 — الشرائح وراء الدراسة، وترتيب Google للمطابقة الأكثر تحديدًا (اللغة+البلد ← اللغة ← x-default)، وأكثر أخطاء الرموز شيوعًا في البيانات.
- ستفسد SEO الدولي — Pubcon Vegas 2017 — منظومة فوضى التنفيذ: أدوات تبلغ معلومات خاطئة، ومحتوى يُخدم من عناوين تختلف عما هو مفهرس، وفخاخ الصفحات المكررة.
من أنحاء المجال
- وثيقة Google عن النسخ الموطنة من صفحاتك — وثيقة التنفيذ الأساسية؛ الصياغة الدقيقة للطرق الثلاث، وقواعد التبادلية/الإشارة الذاتية، والرموز الصالحة، وشرط URL المطلق. اقرأها كاملة قبل البناء.
- وثيقة Google عن إدارة المواقع متعددة المناطق واللغات — خيارات بنية URL وتنبيه إعادة التوجيه التلقائية/الإخفاء وراء «أعد توجيه المستخدمين لا الزواحف».
- WPML — استخدام WordPress SEO (Yoast) مع WPML — كيفية إخراج WordPress لـhreflang، فلا يكفي Yoast وحده، وإعداد الرأس مقابل خريطة الموقع.
- Shopify — إضافة وسوم hreflang في القالب — نمط
<link>اليدوي فيtheme.liquidعندما لا تكون وسوم Shopify Markets للغة وحدها محددة بما يكفي. - Screaming Frog — كيفية تدقيق Hreflang واختباره — سير قائم على الزحف لتأكيد التبادلية عبر عنقود كامل بدل فحص URL واحد.
- Google تذكّر بأن وسوم Hreflang تلميحات لا توجيهات — Search Engine Journal، مايو 2025، عن توضيح Mueller لدمج النسخ باللغة نفسها.
- r/TechSEO — مجتمع لتصحيح عناقيد hreflang المعطلة.
أثبت أن عنقود hreflang نُشر فعلًا
يفشل Hreflang بصمت: قد تكون الوسوم موجودة وسليمة الصياغة ومع ذلك تُتجاهل إذا غاب رابط العودة. ليست عبارة «إنه في الشيفرة» اختبارًا؛ الاختبار هو التبادلية عبر العنقود كله. نفذ الآتي بعد نشر مجموعة لغة/منطقة.
الاختبار 1 — يعيد كل زوج الوسم، أي التبادلية
- الاختبار المطلوب — ازحف إلى العنقود كله باستخدام returntag، الذي يتحقق من أن كل صفحة A تشير إليها صفحة ما تعود فتشير إلى A، أو شغّل تقرير hreflang في Screaming Frog عبر المجموعة.
- النتيجة المتوقعة — 0 من الأزواج غير التبادلية وإشارة كل URL إلى نفسه. صفر أخطاء لا «بضعة».
- تفسير الإخفاق — يعني الزوج أحادي الاتجاه، A → B لكن B لا تعود إلى A، أن Google تسقط ذلك الزوج. وهذا أكثر إخفاق واقعي شيوعًا ولا يظهر إذا فحصت مصدر URL واحدًا فقط.
- نافذة المراقبة — فورية للوسوم المعروضة؛ يقرأ المدقق ما هو منشور الآن.
- سبب التراجع — أي زوج غير تبادلي، أو وسم يشير إلى URL يعيد 301s أو 404s؛ أصلح مصدر الحقيقة وأعد النشر قبل انتظار Google.
الاختبار 2 — تعالج Google العنقود بصورة سليمة
- الاختبار المطلوب — أوقفت Google تقرير International Targeting القديم في Search Console في سبتمبر 2022، فلا تعتمد عليه. افحص Page Indexing لكل لغة ومنطقة في العنقود، وأكد عبر URL Inspection لعينة من الصفحات أن «Google-selected canonical» وحالة الفهرسة يطابقان توقعك لتلك اللغة والمنطقة.
- النتيجة المتوقعة — تُفهرس الصفحات المقصودة لكل لغة ومنطقة، ولا تظهر “Duplicate, Google chose different canonical” بطريقة تدمج نسخًا بلغات مختلفة، ويعرض URL Inspection البديل المتوقع.
- تفسير الإخفاق — عادة ما تعود الصفحات التي تظهر نسخًا مكررة من رابط أساسي للغة أخرى، أو الفهرسة المجمعة/المدمجة، إلى رابط عودة معطل؛ أعد فحص الاختبار 1، لا إلى hreflang نفسه. hreflang تلميح لا توجيه ملزم، ولذلك قد يُدمج عنقود صحيح تقنيًا إذا رأت Google المحتوى شبه مكرر.
- نافذة المراقبة — 2–4 أسابيع؛ تعيد Search Console الزحف وتبلغ عن العنقود بمرور الوقت لا فورًا.
- سبب التراجع — استمرار فهرسة صفحات لغة ومنطقة تحت رابط أساسي خاطئ، أو ظهور URL إقليمي خاطئ لاستعلام؛ أعد تدقيق التبادلية أولًا، ولا تفترض أن الوسوم «لا تعمل» إذا كانت الفجوة الحقيقية هي رابط العودة.
سجل التغييرات
تم التحديث في 13 أغسطس 2026.
ملخص تحريري وتفاصيل التغيير المسجلة.تفاصيل التغيير
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
المقارنة الكاملة غير متاحة — لم تُؤرشف لقطة سابقة لهذه المراجعة.
تم التحديث في 13 أغسطس 2026.
ملخص تحريري وتفاصيل التغيير المسجلة.تفاصيل التغيير
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
المقارنة الكاملة غير متاحة — لم تُؤرشف لقطة سابقة لهذه المراجعة.
تم التحديث في 25 يوليو 2026.
ملخص تحريري وتفاصيل التغيير المسجلة.تفاصيل التغيير
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
المقارنة الكاملة غير متاحة — لم تُؤرشف لقطة سابقة لهذه المراجعة.
تم التحديث في 18 يوليو 2026.
ملخص تحريري وتفاصيل التغيير المسجلة.تفاصيل التغيير
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
المقارنة الكاملة غير متاحة — لم تُؤرشف لقطة سابقة لهذه المراجعة.