SEO في Eleventy
كيف يبني Eleventy (11ty) المحتوى في HTML ثابت من دون JavaScript من جهة العميل افتراضيًا، وكيف تضيف العناوين وأوصاف meta والوسوم الأساسية وخرائط المواقع والبيانات المنظمة بنفسك حول تتابع البيانات.
اللغات
دليل واحد في هذه الصفحة
- أداة مباشرة ذات صلةHTTP Status & Redirect Checker
يخرج Eleventy HTML عاديًا بصفر JavaScript من جهة العميل افتراضيًا، فيكون المحتوى في أول بايت ولا يحتاج إلى انتظار التصيير. وهذه بداية آمنة لقابلية الفهرسة، لكن Eleventy لا ينشئ أي وسم SEO: كل عنوان ووصف ووسم أساسي وrobots وOpen Graph وخريطة موقع وJSON-LD تنفذه أنت. وتتيح بنية تتابع البيانات إعلان الإعدادات الافتراضية مرة واشتقاق الوسوم الأساسية تلقائيًا. أضف الإضافات لتسهيل التنفيذ، لا لاكتساب إمكانات جديدة، وتحقق دائمًا من الناتج المنشور، لا البناء المحلي فقط.
الخلاصة — يبني Eleventy موقعك في ملفات HTML عادية مسبقًا، وعلى خلاف معظم أدوات JavaScript لا يرسل JavaScript إلى المتصفح افتراضيًا. وهذا من أفضل الأوضاع لـGoogle. لكن Eleventy لا يكتب وسوم العنوان أو أوصاف meta أو خريطة الموقع نيابة عنك؛ عليك إضافة ذلك بنفسك.
ما هو Eleventy
Eleventy (وستراه مكتوبًا أيضًا 11ty) هو مولد مواقع ثابتة. تكتب المحتوى في Markdown وقوالب الصفحات في شيء مثل Nunjucks أو Liquid، ثم يحول Eleventy ذلك كله إلى ملفات HTML مكتملة قبل أن يزور أحد الموقع. ترفع الملفات إلى مضيف، وعندما تطلب Google أو يطلب قارئ صفحة يحصلان على HTML كامل فورًا. Evidence for this claim Eleventy transforms templates and data into static output files during a build. Scope: Eleventy static site generation. Confidence: high · Verified: Eleventy documentation
ما يميز Eleventy عن معظم الأدوات المبنية على JavaScript أنه يرسل صفر JavaScript إلى المتصفح افتراضيًا. Evidence for this claim Eleventy does not require a client-side JavaScript runtime and ships only the browser JavaScript a developer adds. Scope: Eleventy core output; site code can add JavaScript. Confidence: high · Verified: Eleventy documentation الصفحة التي يحصل عليها الزائر HTML عادي — لا شيء يحتاج إلى العمل في المتصفح لبنائها. وهذا مثالي لـSEO: لا توجد خطوة تصيير تنتظرها Google، وتُحمَّل الصفحات بسرعة.
لماذا يساعد ذلك SEO
- المحتوى موجود في HTML الخام. ترى Google النص والروابط في أول جلب — ولا حاجة إلى تشغيل JavaScript بنجاح أولًا.
- إنه سريع. HTML عادي من دون حمولة سكربت ممتاز لـCore Web Vitals.
- أعطال أقل. تعني الأجزاء المتحركة الأقل طرقًا أقل لاختفاء المحتوى من البحث.
الفخ الكبير: Eleventy لا ينفذ SEO نيابة عنك
هذا هو الجزء الذي يخطئ فيه الناس. يمنحك Eleventy HTML نظيفًا، لكنه لا يضيف أي وسم SEO تلقائيًا:
- لا يوجد وسم
<title> - لا يوجد وصف meta
- لا يوجد رابط أساسي
- لا توجد خريطة موقع
- لا توجد بيانات منظمة
كل ذلك عليك إضافته — عادةً في ملف تخطيط مشترك يلتف حول كل صفحة، فتكتبه مرة وترثه كل صفحة. توجد إضافات تساعد (وأشهرها eleventy-plugin-seo)، لكنها وسائل راحة لا سحرًا. ولا يزال العمل يجب أن يحدث.
النموذج الذهني: تتابع البيانات
حيلة Eleventy الذكية لتنفيذ ذلك من دون تعديل كل صفحة يدويًا هي تتابع البيانات. تحدد الإعدادات الافتراضية للموقع مرة واحدة في ملف بيانات عام (اسم الموقع، وعنوان الأساس، والصورة الاجتماعية الافتراضية)، ويطبقها Eleventy في كل مكان. وتستبدلها على مستوى القسم أو الصفحة حيث تحتاج فقط. بل يتيح لك حساب قيم مثل إنشاء عنوان URL الأساسي لكل صفحة تلقائيًا من نطاقك ومسار الصفحة.
هل تريد النسخة التقنية — تتابع البيانات كاملًا، وكود وسوم meta والوسوم الأساسية، ومقارنة الإضافات، وخرائط المواقع، وتحسين الصور، وSEO للترقيم؟ انتقل إلى علامة Advanced.
الخلاصة — يصدر Eleventy HTML عاديًا وقت البناء مع صفر JavaScript من جهة العميل افتراضيًا، لذلك يكون المحتوى في الاستجابة قبل أول طلب زاحف — وهو أقل إعدادات قابلية الفهرسة مخاطرة. لكنه لا يقدم أي وسم SEO: العنوان والوصف والوسم الأساسي وrobots وOG وخريطة الموقع وJSON-LD كلها عليك بناؤها. تتابع البيانات (
_data/site.js→ ملفات بيانات المجلد → front matter →eleventyComputed) هو البنية التي تجعل ذلك قابلًا للتوسع — صرّح بالإعدادات الافتراضية مرة واستخرج الوسوم الأساسية فيeleventyComputed. وتضيف الإضافات (eleventy-plugin-seoو@11ty/eleventy-imgو@quasibit/eleventy-plugin-sitemap) سهولة استخدام لا إمكانات جديدة. وrobots.txtملف passthrough. لغة القالب مسألة ألفة الفريق لا SEO — اختر ما يعرفه الفريق. الإصدار v3 متمحور حول ESM ويجعل إضافة Image Transform الخيار الافتراضي لصور مستوفية لمتطلبات CWV. راقب ثلاث حالات: قد يفشل ترتيب تبعياتeleventyComputedبصمت، ولا تضمن عضوية المجموعة إصدار عنوان URL، والبناء المحلي لا يثبت ما يقدمه موقع الإنتاج — تحقق من الناتج المنشور مباشرة.
لماذا يمثل Eleventy أساسًا قويًا لـSEO
يبني Eleventy كل مسار إلى HTML ثابت وقت البناء، وعلى خلاف Next.js وNuxt وGatsby وAstro لا يرسل أي JavaScript إلى المتصفح ما لم تضفه. Evidence for this claim Eleventy compiles templates to static output and adds no client-side framework runtime by default. Scope: Eleventy core behavior. Confidence: high · Verified: Eleventy documentation لا يوجد رسم من جهة العميل ينتظره الزاحف، ولا أثر لميزانية الرسم، ولا حزمة hydration تثقل Core Web Vitals. وتسجل مواقع Eleventy الإنتاجية عادةً درجات Lighthouse بين 99 و100 في كل الجوانب، مع صفحات رئيسية ترسل 0 KB من JavaScript.
وهو سريع في البناء أيضًا، وهذا أهم لـSEO مما يبدو: فالبناء الأسرع يعني دورات نشر أضيق، فتصل إصلاحات المحتوى إلى محركات البحث أسرع. وفي معيار من 4 000 ملف Markdown يبني Eleventy في نحو 1,93s مقابل نحو 70,6s لـNext.js، مع حجم 22,9s لـAstro و29s لـGatsby وnode_modules أصغر بكثير (34 MB مقابل 583 MB لدى Gatsby).
لكن — وهذه هي فكرة الصفحة كلها — لا يمنحك أي من ذلك وسم SEO. ينشئ Eleventy HTML نظيفًا ويتوقف هناك. كل وسم <title> ووصف meta وإدخال خريطة موقع وكتلة JSON-LD شيء تنفذه أنت. والخبر الجيد أن نموذج بيانات Eleventy يجعل تنفيذها مرة واحدة وفي كل مكان مريحًا فعلًا.
تتابع البيانات: أساس بنية SEO لديك
أهم مفهوم في SEO القابل للتوسع لدى Eleventy هو تتابع البيانات — ترتيب حل Eleventy للقيمة، من الأولوية الأقل إلى الأعلى: Evidence for this claim Eleventy's data cascade resolves data from multiple sources according to a documented priority order. Scope: Eleventy data cascade. Confidence: high · Verified: Eleventy: Data cascade
- البيانات العامة التي يوفرها Eleventy
- ملفات البيانات العامة في
_data/(مثل_data/site.jsالذي يحتوي علىtitleوdescriptionوurlوauthor) - ملفات بيانات المجلد (مثل
blog/blog.11tydata.js— تمنح كل منشور مدونةog:type: article) - Front matter القالب (تجاوزات لكل صفحة)
eleventyComputed(الأعلى — اشتق القيم من بيانات أخرى)
عمليًا:
- صرّح بإعدادات SEO الافتراضية مرة واحدة في
_data/site.js. - تجاوزها على مستوى المجلد لنوع محتوى (تحصل كل المنشورات على نوع OG للمقال، ويحصل قسم
noindexعلىnoindex، وهكذا). - تجاوزها لكل صفحة في front matter عندما تكون الصفحة خاصة.
- استخدم
eleventyComputedللقيم المشتقة — والوسم الأساسي هو المثال الأوضح:
// _data/eleventyComputed.js (or eleventyComputed in a layout data file)
module.exports = {
canonical: (data) => `${data.site.url}${data.page.url}`,
};الآن تملك كل صفحة وسمًا أساسيًا صحيحًا يشير إلى نفسها من دون أي عمل لكل صفحة. تلك هي القوة التي يمنحك إياها التتابع.
تستحق حالة خاصة الاختبار لا الافتراض: يمكن لقيم eleventyComputed أن تعتمد على قيم محسوبة أخرى (كعنوان يغذي وصفًا محسوبًا)، وعلى Eleventy حل مخطط التبعيات قبل تصيير أي شيء. تعمل السلاسل المباشرة جيدًا، لكن القيمة المحسوبة التي تعتمد على نفسها عرضًا — مباشرة أو عبر حقل محسوب آخر — مرجع دائري، وقد تظهر مشكلات الترتيب بصمت في صورة قيمة مفقودة أو خاطئة بدل خطأ بناء واضح. إذا اعتمدت على حقول eleventyComputed متعددة الطبقات، فتحقق من القيم الدقيقة في الناتج المصيّر، لا من نجاح البناء فقط. Evidence for this claim Computed Data values can derive from other computed values, so dependency ordering and circular references need testing against the rendered output. Scope: Eleventy eleventyComputed resolution. Confidence: high · Verified: Eleventy: Computed Data
وسوم meta في التخطيط الأساسي
البنية المعتادة هي تخطيط أساسي يملك عنصر <head>، مع تخطيطات المحتوى التي تمده:
_includes/
layouts/
base.njk ← <head> with all SEO meta tags
post.njk ← extends base, adds BlogPosting schema
_data/
site.js ← sitewide SEO defaultsوسوم meta التي تحتاج إلى تنفيذها بنفسك، في الحد الأدنى:
<title>— فريد لكل صفحة<meta name="description">— فريد لكل صفحة<link rel="canonical">— لا يملك Eleventy وسمًا أساسيًا مدمجًا؛ أضفه صراحة<meta name="robots">—noindexلصفحات المسودة/المعاينة (ولصفحات الترقيم الرقيقة إن وجدت)- Open Graph —
og:titleوog:descriptionوog:imageوog:urlوog:type - بطاقات Twitter/X —
twitter:cardوtwitter:titleوtwitter:descriptionوtwitter:image
تخطيط Nunjucks أدنى يسحب من <head> والتتابع:
<title>{{ title }} | {{ site.title }}</title>
<meta name="description" content="{{ description or site.description }}">
<link rel="canonical" href="{{ canonical }}">
<meta property="og:title" content="{{ title }}">
<meta property="og:image" content="{{ ogImage or site.defaultImage }}">
<meta name="twitter:card" content="summary_large_image">مقارنة إضافات SEO
لا تحتاج إلى إضافة — يمنحك التخطيط الأساسي اليدوي مع تتابع البيانات سيطرة كاملة بلا تبعيات، ويفضل كثير من الممارسين ذلك تحديدًا. لكن يجدر معرفة إضافتين:
eleventy-plugin-seo(artstorm) — الأكثر نضجًا وانتشارًا. يصدر shortcode واحد{% seo %}(Liquid) /{% seo "" %}(Nunjucks) العنوان والوصف والوسم الأساسي وrobots وOpen Graph وبطاقة Twitter والمؤلف من كتلة إعداد (عنوان الموقع والوصف وعنوان URL والمؤلف ومعرف Twitter والصورة الافتراضية). كما يتعامل مع توجيهات الروبوت في الصفحات المرقمة وفاصل العنوان ووضع الحد الأدنى. التثبيت:npm install eleventy-plugin-seo.eleventy-plugin-metagen(tannerdolby) — أكثر تفصيلًا، مع معاملات shortcode مسماة؛ ينشئ charset وviewport والعنوان والمؤلف والوصف والمولد وOG وTwitter Card والوسم الأساسي ووسوم CSS/JS.
القاعدة التقريبية: الإضافات تسهّل التنفيذ، لكنها لا تضيف إمكانات جديدة. كل ما تفعله يمكنك فعله في التخطيط الأساسي. استخدم واحدة إذا كنت تفضل عدم صيانة القالب المتكرر.
robots.txt
لا ينشئ Eleventy ملف robots.txt تلقائيًا. توجد طريقتان:
1 — Passthrough ثابت (الأبسط). ضع ملف robots.txt في المصدر وانسخه حرفيًا:
eleventyConfig.addPassthroughCopy("src/robots.txt");2 — إنشاء بالقالب (للناتج الخاص بالبيئة — احجب كل شيء في staging واسمح به في الإنتاج):
---
permalink: /robots.txt
eleventyExcludeFromCollections: true
---
User-agent: *
{% if environment == "production" %}
Allow: /
Sitemap: {{ site.url }}/sitemap.xml
{% else %}
Disallow: /
{% endif %}تذكر القاعدة العامة: Disallow يحجب الزحف لا الفهرسة — ووسم noindex في عنوان URL محجوب بالزحف لن تراه Google أبدًا.
إنشاء خريطة الموقع
ليست مدمجة أيضًا. الخيار الأكثر تحكمًا هو قالب يدوي — أنشئ sitemap.xml.njk مع permalink: /sitemap.xml وeleventyExcludeFromCollections: true، وكرر collections.all، واستبعد الصفحات، وأصدر إدخالات <loc> و<lastmod>:
---
permalink: /sitemap.xml
eleventyExcludeFromCollections: true
---
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% for page in collections.all %}
{% if not page.data.excludeFromSitemap %}
<url>
<loc>{{ site.url }}{{ page.url }}</loc>
<lastmod>{{ page.date | dateToISO }}</lastmod>
</url>
{% endif %}
{% endfor %}
</urlset>أو استخدم @quasibit/eleventy-plugin-sitemap (اضبط hostname؛ وهو يدعم أيضًا الروابط البديلة متعددة اللغات). وفي كلتا الحالتين، ضع للصفحات المساعدة eleventyExcludeFromCollections: true حتى لا تتسرب إلى الخريطة.
هناك نقطة ينبغي ضبطها بدقة: التكرار على collections.all يمر على عناصر المجموعة، ولا يضمن إنشاء الناتج. قد ينتمي قالب إلى مجموعة ولا يصدر عنوان URL — غالبًا لأن permalink مضبوط على false، أو لأن ملفًا للبيانات فقط لم يُقصد به أصلًا إنشاء صفحة. عضوية collections.all ليست دليلًا على أن العنصر يجب أن يدخل خريطة الموقع؛ افحص إدخالات <loc> المصيّرة مقابل الصفحات التي تتوقع فعلًا أن تكون قابلة للزحف. Evidence for this claim Collection membership does not by itself guarantee that an item emits a URL or belongs in the sitemap. Scope: Eleventy collections and permalink interaction. Confidence: high · Verified: Eleventy: Collections
تحسين الصور من أجل Core Web Vitals
HTML الموقع الثابت سريع، لكن الصور غير المحسنة ستظل تضر LCP وCLS. الإصلاح هو @11ty/eleventy-img، وفي v3 المسار الموصى به هو إضافة Image Transform التي تعالج كل وسم <img> في HTML المبني تلقائيًا — من دون حاجة إلى shortcode لكل صورة:
const { eleventyImageTransformPlugin } = require("@11ty/eleventy-img");
eleventyConfig.addPlugin(eleventyImageTransformPlugin, {
formats: ["avif", "webp", "jpeg"],
defaultAttributes: {
loading: "lazy",
decoding: "async",
},
});ما الذي يقدمه ذلك لـSEO:
- إضافة
widthوheightتلقائيًا → تمنع تحرك التخطيط (CLS) srcsetبعروض متعددة → صور متجاوبة<picture>مع بدائل AVIF وWebP وJPEG- لا تكبير للصورة
بالنسبة إلى صور البطل فوق الطية، تجاوز الإعداد الكسول الافتراضي حتى تُحمل فورًا:
<img src="hero.jpg" loading="eager" fetchpriority="high" eleventy:widths="800,1200">الروابط الدائمة وعناوين URL النظيفة
الإعداد الافتراضي في Eleventy هو عناوين URL نظيفة مع شرطة مائلة لاحقة: about.njk → _site/about/index.html → /about/. تجاوز ذلك في front matter:
permalink: "/blog/{{ title | slugify }}/"علامات مفيدة: يعالج permalink: false القالب للمجموعات لكنه يتخطى كتابته إلى القرص (مفيد لقوالب البيانات فقط)، ويعامل dynamicPermalink: false سلسلة permalink حرفيًا. الشيء الوحيد في SEO الذي يجب الانضباط فيه هو اتساق الشرطة المائلة اللاحقة — فخلط /page و/page/ يخلق بنفسه مشكلة محتوى مكرر.
يجدر قول ذلك صراحة لأنه يوقع الناس: permalink: false يمنع الناتج بالكامل — يُترجم الملف المصدر ويمكنه الاستمرار في تغذية المجموعات والبيانات، لكن لا تُكتب صفحة HTML ولا يوجد عنوان URL للزحف. ووجود ملف مصدر في مجلد المحتوى ليس دليلًا على أن صفحة مقابلة نُشرت؛ إذا غابت صفحة من البحث، افحص ناتج _site المبني قبل افتراض أنها مشكلة فهرسة لا permalink. Evidence for this claim A permalink value of false suppresses page output entirely, so a source file's existence is not proof of a crawlable page. Scope: Eleventy permalink output control. Confidence: high · Verified: Eleventy: Permalinks
SEO للترقيم
يقسم ترقيم Eleventy مجموعة إلى ملفات خرج. تكون الصفحة الأولى /blog/، ثم /blog/1/ و/blog/2/ وهكذا (ويمكن تخصيص ذلك عبر permalink). تحتاج كل صفحة في المجموعة إلى عنوان URL فريد وpagination.alias لإتاحة بيانات الصفحة. قرارات SEO هي:
- الوسوم الأساسية. مدرستان: توجيه كل صفحة إلى الصفحة 1 (يجمع الإشارات لكنه يدفن محتوى الصفحات العميقة المشروع)، أو وسوم أساسية تشير إلى الصفحة نفسها بحيث يكون لكل صفحة وسم عنوانها — وهو النهج المفضل لدى Google في الوثائق الحالية. أستخدم الافتراضي الذاتي ما لم تكن الصفحات العميقة لا تحتوي فعلًا على ما يستحق الفهرسة.
rel="prev"/rel="next". أكدت Google في 2019 أنها لم تعد تستخدمهما إشارات ترتيب. وما زال بعض المواقع يضيفهما لمساعدة الزواحف على فهم بنية السلسلة؛ وإذا فعلت، فصلهما منpagination.href.previousوpagination.href.next.noindexللصفحات الرقيقة. إذا كان محتوى الصفحات اللاحقة غير كافٍ، فأضفnoindex(عبر حقلnoindexعند استخدامeleventy-plugin-seo، أو يدويًا في الرأس).
البيانات المنظمة / JSON-LD
الأسلوب اليدوي أكثر مرونة: عرّف كائن schema في eleventyComputed أو ملف بيانات مجلد، ثم حوّله إلى سلسلة في التخطيط. الأنواع الأنظف لموقع محتوى هي Organization وWebSite على مستوى الموقع في التخطيط الأساسي، وBlogPosting وArticle لكل منشور، وBreadcrumbList إذا كانت لديك مسارات تنقل، وFAQPage لأقسام الأسئلة الشائعة. تقدم @quasibit/eleventy-plugin-schema shortcode لـBlogPosting وWebPage إذا كنت تفضل عدم كتابته يدويًا (وتتوقع تواريخ ISO 8601، فأنشئ مرشح تاريخ).
Eleventy v2 مقابل v3 — ما الذي تغير لـSEO
الإصدار v3 الحالي المستقر متمحور حول ESM: يحتاج ملف إعداد يستخدم require() الآن إلى امتداد .cjs، أو تضبط "type": "module" في package.json وتستخدم import. وما يزال CommonJS مدعومًا بالكامل — فقط كن متعمدًا. والفائدتان المرتبطتان بـSEO هما:
- عمليات بناء من الصفر أسرع بنحو 38% في المواقع التي تتجاوز 500 صفحة → نشر أسرع وفهرس أحدث.
- إضافة Image Transform هي الخيار الافتراضي — معالجة لاحقة تصريحية لكل
<img>، تجعل تقديم صور متجاوبة ومستوفية لمتطلبات CLS أسهل من معالجة كل صورة يدويًا.
تحقق من ناتج الإنتاج، لا البناء المحلي فقط
كل ما سبق يتعلق بإتقان المصدر — تتابع البيانات والتخطيط والإضافات. لكن لا يثبت أي منه ما يُنشر فعلًا. فبناء محلي لـ_site (أو eleventy --serve) لا يخبرك بما يقدمه الإنتاج: المضيف والمسار اللذان تستخدمهما منصة النشر، وإعادات التوجيه التي تحقنها، والرؤوس التي تضبطها، أو ما إذا كان CDN/proxy يعيد كتابة شيء في الطريق. أكد أن إصدار Eleventy المثبت يطابق ما تختبره، ثم افحص الموقع المنشور مباشرة، لا ناتج البناء فقط:
- HTML الخام — افحص مصدر عنوان URL الحي، لا
_site/index.htmlفقط؛ وتأكد من وجود العنوان ووصف meta والوسم الأساسي وصحتها. - مضيف الوسم الأساسي المطلق — قد تُستخدم قيمة
localhostأوsite.urlخطأً في الإنتاج إذا لم تُستبدل حسب البيئة. - XML لخريطة الموقع — اجلب
/sitemap.xmlالحية وتأكد من أنها تعمل وتستخدم مضيف الإنتاج وتسرد عناوين URL المتوقعة (راجع أعلاه أن عضوية المجموعة لا تضمن الإدخال). - الصفحات المحجوبة/المساعدة — افحص عينة من صفحات
permalink: falseوeleventyExcludeFromCollections: trueلتتأكد من غيابها عن الموقع الحي، لا البناء المحلي فقط. - الأصول — يجب أن تحل CSS وJS والصور المشار إليها في HTML المبني على مضيف الإنتاج (ومن السهل تفويت عدم تطابق المسار النسبي والمطلق محليًا).
- رموز الحالة وإعادات التوجيه — اطلب عناوين URL الحية مباشرة وأكد استجابات 200s حيث تتوقع 200s؛ فقواعد إعادة التوجيه في منصة النشر قد تحول صفحة أساسية بصمت إلى سلسلة 301 لا تظهر في بناء محلي.
تثبيت إضافة من طرف ثالث ليس دليلًا على صحة الناتج أيضًا — فهو يغير ما يُولد، لا ما تفعله بيئة نشر معينة به. تعامل معه كعنصر في قائمة فحص الإصدار، لا إعدادًا لمرة واحدة. Evidence for this claim Local build output does not by itself prove production hostnames, redirects, headers, or canonical behavior; the deployed artifact needs its own verification pass. Scope: Eleventy production deployment verification. Confidence: medium · Verified: Patrick Stox: Eleventy SEO
أخطاء SEO الشائعة في Eleventy
- افتراض أن Eleventy «يتولى SEO» — فهو يتولى HTML؛ ووسوم SEO كلها عليك.
- نسيان الوسم الأساسي تمامًا (لا يوجد مدمجًا).
- نشر موقع بلا خريطة موقع لأنك افترضت أنها تلقائية.
- ترك الصور غير المحسنة تلغي ميزة السرعة.
- إنشاء شرطات مائلة لاحقة غير متسقة فتتولد عناوين URL مكررة.
- استخدام
Disallowفيrobots.txtلمحاولة إلغاء فهرسة صفحة (استخدمnoindexبدلًا منه). - ترك صفحات المسودة/المعاينة قابلة للفهرسة لأنك لم تضع
noindexعلى القسم.
لمعرفة موضع Eleventy بين المولدات الأخرى، راجع مركز Static Site Generators؛ ولنظرية الرسم التي تشرح لماذا يكون الناتج الثابت منخفض المخاطر، راجع مركز JavaScript SEO.
ملخص الذكاء الاصطناعي
خلاصة مركزة للنسخة المتقدمة:
- يخرج Eleventy HTML عاديًا وقت البناء مع صفر JavaScript من جهة العميل افتراضيًا — المحتوى في أول بايت، ولا شيء يحتاج إلى رسم. إنه أقل بناء مخاطرة لقابلية الفهرسة، مع شيوع Lighthouse بين 99 و100 وصفحات رئيسية بحمولة JS مقدارها 0 KB.
- لا ينشئ Eleventy أي وسم SEO. لا عنوان ولا وصف ولا وسم أساسي ولا robots ولا Open Graph ولا خريطة موقع ولا JSON-LD. كل واحد منها تنفذه أنت.
- تتابع البيانات هو بنية التوسع:
_data/site.jsالعام → ملفات بيانات المجلد → front matter →eleventyComputed. أعلن الإعدادات الافتراضية مرة؛ واشتق الوسم الأساسي بـeleventyComputed(${site.url}${page.url}). - تعيش وسوم meta في تخطيط أساسي مشترك — يدويًا أو عبر
eleventy-plugin-seo(artstorm، الإضافة الرائدة: shortcode واحد{% seo %}للعناوين والوصف والوسم الأساسي وrobots وOG وTwitter). robots.txtملف passthrough (addPassthroughCopy) أو قالب للناتج الخاص بالبيئة — لا ملف مولد تلقائيًا.- خريطة الموقع = قالب Nunjucks فوق
collections.all، أو@quasibit/eleventy-plugin-sitemap. استبعد الصفحات المساعدة بـeleventyExcludeFromCollections: true. - الصور:
@11ty/eleventy-img؛ إضافة Image Transform في v3 تعالج كل<img>لاحقًا (widthوheightتلقائيًا → بلا CLS، وsrcsetوAVIF/WebP). تجاوز صور البطل إلىloading="eager"وfetchpriority="high". - الترقيم: عنوان URL فريد لكل صفحة مع
pagination.alias؛ اجعل الافتراضي وسومًا أساسية ذاتية؛ ولم تعدrel=prev/nextإشارة ترتيب. - لغة القالب لا تؤثر في SEO — اخترها حسب الألفة. v3 متمحور حول ESM (تحتاج
require()إلى.cjsأو"type":"module") ويجعل Image Transform افتراضيًا. - الإضافات تسهّل التنفيذ ولا تضيف إمكانات جديدة — فالنهج اليدوي بالتخطيط الأساسي ينفذ كل ما تنفذه.
- ثلاث حالات ينبغي اختبارها لا افتراضها: قد تعتمد قيم
eleventyComputedذات الطبقات على بعضها وتفشل بصمت إذا اختل الترتيب؛ لا تضمن عضويةcollections.allإصدار عنوان URL فعلًا (تحقق منpermalink: false)؛ والبناء المحلي لـ_siteلا يثبت شيئًا عن الإنتاج — تحقق مباشرة من المضيف الأساسي الحي وخريطة الموقع والصفحات المحجوبة والأصول ورموز الحالة.
الوثائق الرسمية
وثائق أولية — من Eleventy وإضافات SEO ومحركات البحث.
Eleventy
- Eleventy docs home — نقطة البداية.
- Image plugin (
@11ty/eleventy-img) — Image Transform والصور المتجاوبة وwidth/height. - Permalinks — عناوين URL النظيفة و
slugifyوpermalink: falseوالشرطات المائلة اللاحقة. - Pagination — تقسيم المجموعات و
pagination.aliasوعناوين URL لكل صفحة. - Performance — سرعة بناء Eleventy ومعايير صفر JavaScript.
- Passthrough copy — كيفية شحن
robots.txtثابت. - Community plugins — فهرس إضافات SEO وخريطة الموقع وschema.
- Eleventy v3 announcement — ESM أولًا وبناء أسرع وImage Transform.
إضافات SEO وخريطة الموقع وschema
- eleventy-plugin-seo (artstorm) — العنوان والوصف والوسم الأساسي وrobots وOG وTwitter Card.
- eleventy-plugin-metagen (tannerdolby) — إنشاء وسوم meta تفصيلي.
- @quasibit/eleventy-plugin-sitemap — خريطة موقع مع بدائل متعددة اللغات.
- @quasibit/eleventy-plugin-schema — JSON-LD (BlogPosting وWebPage).
- Consolidate duplicate URLs (canonicals + pagination) — إرشادات الوسوم الأساسية والترقيم التي توجه قرارات SEO أعلاه.
اقتباسات من المصدر
لا توجد تصريحات مسجلة من ممثلي Google أو Bing عن Eleventy تحديدًا — فمحركات البحث لا تعلق على مولدات مواقع ثابتة فردية. والإرشاد المنطبق هو المبدأ العام: HTML المصيّر مسبقًا هو أقل ما يمكنك تقديمه مخاطرة، وهذا بالضبط ما يخرجه Eleventy.
Google — HTML المصيّر مسبقًا هو الأبسط
أوضح John Mueller مرارًا الفكرة العامة: تستطيع Google رسم JavaScript، لكن تقديم HTML مباشرة أبسط وأسرع. تختلف الصياغة الدقيقة بين ساعات العمل والموضوعات في Search Central، ولم يُعثر على تصريح يذكر Eleventy تحديدًا — لذا لا أقتبس سطرًا حرفيًا هنا. وتبقى الخلاصة صحيحة: الناتج الافتراضي لـEleventy هو حالة «قدم HTML مباشرة».
ملاحظة: أشار الملخص إلى أن عبارة Mueller المتاحة لا تنسب مباشرة إلى Eleventy ونصح بعدم الاستشهاد بها من دون تحقق — لذلك أُعيدت صياغتها عمدًا لا اقتباسها حرفيًا أعلاه.قائمة فحص SEO لـEleventy
مرور للتأكد من أن موقع Eleventy مضبوط للبحث — لأن Eleventy لم ينفذ أيًا من ذلك نيابة عنك:
- أُعلنت إعدادات SEO الافتراضية مرة واحدة في
_data/site.js(العنوان والوصف وurlوالمؤلف وصورة OG الافتراضية). - يملك التخطيط الأساسي
<head>مع وسوم<title>ووصف meta وOG وTwitter Card المسحوبة من التتابع. - ضُبط وسم أساسي في كل صفحة (لا يملك Eleventy واحدًا مدمجًا) — ويفضل اشتقاقه في
eleventyComputedمنsite.url+page.url. - تحمل صفحات المسودة/المعاينة/القسم التي لا ينبغي أن ترتب
noindex(اضبطه في ملف بيانات المجلد حيث يمكن). - تُنشأ خريطة موقع — قالب فوق
collections.allأو@quasibit/eleventy-plugin-sitemap— وتُستبعد الصفحات المساعدة بـeleventyExcludeFromCollections: true. - يوجد
robots.txt(نسخ passthrough أو قالب)، ويشير إلى الخريطة ولا يحجب JS/CSS أو الصفحات التي تريد فهرستها. - تمر الصور عبر
@11ty/eleventy-img(Image Transform في v3) حتى تُصدرwidthوheightوsrcsetوالصيغ الحديثة — مع تجاوز صور البطل إلىloading="eager"وfetchpriority="high". - الروابط الدائمة نظيفة والشرطة المائلة اللاحقة متسقة في الموقع كله.
- تمنح المجموعات المرقمة كل صفحة عنوانًا فريدًا ووسمًا أساسيًا ذاتيًا (إلا إذا كانت الصفحات العميقة رقيقة حقًا →
noindex). - تُصدر البيانات المنظمة (
Organization/WebSiteللموقع، وBlogPosting/Articleللمنشور) في التخطيط أو عبر إضافة schema. - تؤدي تعديلات المحتوى إلى إعادة بناء + نشر؛ فالموقع الثابت لا يعكس إلا آخر بناء.
- يُفحص الموقع الحي المنشور مباشرة — HTML الخام ومضيف الوسم الأساسي و
/sitemap.xmlوالصفحات المحجوبة/المساعدة ومسارات الأصول ورموز الحالة — لا بناء_siteالمحلي فقط. فالبناء المحلي لا يثبت ما يقدمه الإنتاج.
إطار البيانات → القالب → الأثر
تدخل مشكلات SEO في Eleventy عادةً في واحدة من ثلاث مراحل:
- البيانات: يحدد front matter وتتابع البيانات العناوين والأوصاف والوسوم الأساسية واللغة وحالة النشر وقيم البيانات المنظمة.
- القالب: تحول التخطيطات تلك البيانات إلى وسم رأس وروابط متسقة.
- الأثر: HTML وsitemap وrobots الناتجة في
_siteهي ما تستقبله الزواحف.
تحقق بهذا الترتيب عند تشخيص مصدر قيمة سيئة، لكن تحقق من الناتج المبني قبل الإصدار. فلا يفيد حقل front matter صحيح إذا لم يصيّره التخطيط أو ظلت المجموعة تنشر مسار مسودة.
SEO في Eleventy — ورقة غش
من الذي ينشئ ماذا
| عنصر SEO | مدمج في Eleventy؟ | كيف تحصل عليه |
|---|---|---|
| HTML نظيف، صفر JS | نعم (افتراضي) | لا شيء |
<title> / وصف meta | لا | التخطيط الأساسي + التتابع |
| الوسم الأساسي | لا | eleventyComputed: ${site.url}${page.url} |
meta robots / noindex | لا | Front matter / بيانات المجلد |
| Open Graph / Twitter Card | لا | التخطيط الأساسي (أو eleventy-plugin-seo) |
robots.txt | لا | addPassthroughCopy أو قالب |
| خريطة الموقع | لا | قالب فوق collections.all أو @quasibit/...sitemap |
| صور متجاوبة | إضافة | @11ty/eleventy-img (Image Transform في v3) |
| JSON-LD | لا | التخطيط / @quasibit/...schema |
تتابع البيانات (من الأولوية الأقل إلى الأعلى)
- البيانات العامة لـEleventy
- الملفات العامة في
_data/(site.js) - ملفات بيانات المجلد (
blog.11tydata.js) - Front matter القالب
eleventyComputed(اشتق الوسم الأساسي هنا)
قائمة مختصرة للإضافات
eleventy-plugin-seo(artstorm) — إضافة وسوم meta الرائدة؛ shortcode{% seo %}.eleventy-plugin-metagen— وسوم meta تفصيلية.@quasibit/eleventy-plugin-sitemap— خريطة موقع + بدائل متعددة اللغات.@quasibit/eleventy-plugin-schema— JSON-LD.@11ty/eleventy-img— الصور.
حقائق سريعة
- لغة القالب (Nunjucks / Liquid / Markdown / WebC / HTML / JS) → لا فرق في SEO؛ اخترها حسب الألفة.
- v3 متمحور حول ESM: أعد تسمية إعداد
require()إلى.cjsأو اضبط"type": "module". - استبعد الصفحات المساعدة:
eleventyExcludeFromCollections: true. - الترقيم: وسوم أساسية ذاتية افتراضيًا؛ ولم تعد
rel=prev/nextإشارة ترتيب. - الإضافات = تنفيذ أسهل، لا إمكانات جديدة.
أنشئ موقع Eleventy جاهزًا لـSEO
بداية العمل: أنشئ ملف البيانات العام ورأس التخطيط الأساسي <head> حتى ترث كل صفحة وسوم meta الصحيحة من التتابع.
macOS / Linux
# In your Eleventy project root
mkdir -p src/_data src/_includes/layouts
cat > src/_data/site.js <<'EOF'
module.exports = {
title: "Your Site",
description: "Your default site description.",
url: "https://example.com",
author: "Your Name",
};
EOF
# Derive a self-referencing canonical for every page via the data cascade
cat > src/_data/eleventyComputed.js <<'EOF'
module.exports = {
canonical: (data) => `${data.site.url}${data.page.url}`,
};
EOFWindows (PowerShell)
# In your Eleventy project root
New-Item -ItemType Directory -Force -Path src\_data, src\_includes\layouts | Out-Null
@'
module.exports = {
title: "Your Site",
description: "Your default site description.",
url: "https://example.com",
author: "Your Name",
};
'@ | Set-Content src\_data\site.js
@'
module.exports = {
canonical: (data) => `${data.site.url}${data.page.url}`,
};
'@ | Set-Content src\_data\eleventyComputed.jsتأكد من أن HTML المبني يتضمن وسم SEO
بعد البناء، يجب أن يكون المحتوى (ووسوم meta) في HTML الخام — من دون حاجة إلى JS. افحص مجلد الناتج مباشرة.
macOS / Linux
# Build, then grep the output for the tags Eleventy does NOT add for you
npx @11ty/eleventy
grep -o '<link rel="canonical"[^>]*>' _site/index.html
grep -o '<title>[^<]*</title>' _site/index.html
# Confirm robots.txt and sitemap.xml actually shipped
ls -l _site/robots.txt _site/sitemap.xmlWindows (PowerShell)
npx @11ty/eleventy
Select-String -Path _site\index.html -Pattern '<link rel="canonical"'
Select-String -Path _site\index.html -Pattern '<title>'
Get-Item _site\robots.txt, _site\sitemap.xmlإذا لم يجد grep أو Select-String شيئًا، فهذه العلامة غير موجودة — تذكر أن Eleventy لن يضيفها من تلقاء نفسه.
أدوات SEO لـEleventy
eleventy-plugin-seo(artstorm) — إضافة وسوم meta الرائدة: العنوان والوصف والوسم الأساسي وrobots وOG وTwitter Card من shortcode واحد{% seo %}.eleventy-plugin-metagen(tannerdolby) — إنشاء وسوم meta بمعاملات تفصيلية عندما تريد تحكمًا دقيقًا.@11ty/eleventy-img— تحسين الصور؛ تضيف Image Transform في v3 سمتيwidthوheightتلقائيًا، وتبنيsrcsetوتصدر AVIF/WebP.@quasibit/eleventy-plugin-sitemap— إنشاء خريطة موقع مع روابط بديلة متعددة اللغات.@quasibit/eleventy-plugin-schema— JSON-LD (BlogPostingوWebPage).@11ty/eleventy-plugin-rss— موجزات RSS/Atom (محدثة لـv3).- Lighthouse / PageSpeed Insights — تحقق من Core Web Vitals التي ينبغي أن يحققها ناتجك الثابت.
- فحص عنوان URL في Google Search Console — أكد أن HTML المصيّر يطابق HTML المبني (وينبغي ذلك، إذ لا يوجد ما يحتاج إلى تصيير في المتصفح) وأن الوسوم الأساسية تُحل إلى الوجهة الصحيحة.
- Screaming Frog / Ahrefs Site Audit — ازحف الموقع المبني لاكتشاف العناوين المفقودة والوسوم الأساسية المفقودة وتكرار الشرطات المائلة وملفات الناتج اليتيمة.
أنماط SEO المضادة في Eleventy
أخطاء ملموسة أراها في مواقع Eleventy الحقيقية — وكلها تأتي من التعامل مع ناتج HTML النظيف لدى Eleventy كأنه عمل SEO مكتمل، بينما هو نقطة البداية فقط.
افتراض أن Eleventy «يتولى SEO»
الخطأ: نشر موقع اعتمادًا على ناتج Eleventy ذي الصفر JavaScript ودرجات Lighthouse بين 99 و100، من دون إضافة عنوان أو وصف meta أو وسم أساسي.
لماذا هو خطأ: يتولى Eleventy الرسم فقط — يبني HTML نظيفًا ويتوقف. وHTML سريع قابل للزحف من دون وسم <title> لن يرتب لشيء محدد؛ تحتاج Google إلى إشارات الصفحة الفعلية، ولا ينشئ أيًا منها نيابة عنك.
ما ينبغي فعله بدلًا من ذلك: ابنِ وسوم meta الخاصة بـSEO في التخطيط الأساسي منذ اليوم الأول، قبل كتابة صفحة محتوى واحدة — راجع قسم «وسوم meta في التخطيط الأساسي» في علامة Advanced. ينبغي أن ترث كل صفحة العنوان والوصف والوسم الأساسي تلقائيًا من تتابع البيانات.
نسيان الوسم الأساسي تمامًا
الخطأ: ترك <link rel="canonical"> خارج التخطيط لأن الأمر «يبدو تلقائيًا» — لكنه ليس كذلك.
لماذا هو خطأ: لا يملك Eleventy وسمًا أساسيًا مدمجًا. ومن دونه تعتمد على أن تخمن Google عنوان URL المفضل، ويزداد ذلك أهمية عند دخول نسخ الشرطات المائلة اللاحقة ومعاملات ?utm_ أو الصفحات المرقمة إلى الصورة.
ما ينبغي فعله بدلًا من ذلك: اشتقه مرة واحدة في eleventyComputed —
canonical: (data) => `${data.site.url}${data.page.url}` — حتى تحصل كل صفحة على وسم أساسي صحيح يشير إلى نفسها من دون جهد لكل صفحة.
النشر من دون خريطة موقع
الخطأ: افتراض أن خريطة الموقع تُنشأ ضمن البناء بالطريقة نفسها التي ينشئ بها Eleventy ملفات HTML.
لماذا هو خطأ: لا يحدث ذلك. لا تكسر خريطة موقع مفقودة الزحف في موقع صغير، لكنها في أي موقع يتجاوز عددًا قليلًا من الصفحات تبطئ اكتشاف المحتوى الجديد والمحدث.
ما ينبغي فعله بدلًا من ذلك: أضف قالب sitemap.xml.njk يكرر collections.all، أو ثبت @quasibit/eleventy-plugin-sitemap. وفي كلتا الحالتين، ضع للصفحات المساعدة eleventyExcludeFromCollections: true حتى لا تتسرب إليها.
ترك الصور غير المحسنة تلغي ميزة السرعة
الخطأ: إسقاط JPEG/PNG خام مباشرة في القوالب لأن «الموقع سريع أصلًا» بفضل صفر JavaScript.
لماذا هو خطأ: الصفحة الرئيسية ذات الصفر JavaScript مع صورة بطل حجمها 4 MB ستظل تفشل في LCP وCLS — فميزة JS لا تعالج وزن الصورة أو سمات width/height المفقودة.
ما ينبغي فعله بدلًا من ذلك: مرر الصور عبر @11ty/eleventy-img (إضافة Image Transform في v3)، التي تضيف width وheight تلقائيًا وتبني srcset وتصدر AVIF/WebP — ثم اضبط صور البطل فوق الطية على loading="eager" fetchpriority="high" حتى لا يؤخر التحميل الكسول اكتشاف عنصر LCP.
شرطات مائلة لاحقة غير متسقة
الخطأ: الربط بـ/about في بعض القوالب وبـ/about/ في قوالب أخرى، أو ترك طبقة إعادة التوجيه تخفي وجود العنوانين.
لماذا هو خطأ: الناتج الافتراضي لـEleventy هو /about/ (مجلد يضم index.html). وتقسم الروابط الداخلية غير المتسقة قيمة الرابط وميزانية الزحف بين عنوانين يعرضان المحتوى نفسه — أي مشكلة محتوى مكرر أنشأتها بنفسك، لا Eleventy.
ما ينبغي فعله بدلًا من ذلك: اختر صيغة واحدة (فالشرطة المائلة اللاحقة الافتراضية لـEleventy هي الخيار الأسهل) وفرضها في كل رابط داخلي وفي تجاوزات permalink. افحص ذلك بالزحف — وستكشف أداة Redirect Checker الخاصة بي سلاسل إعادة التوجيه إذا كان عدم اتساق الشرطة المائلة يُخفى بـ301s بدل إصلاحه في المصدر.
استخدام Disallow لمحاولة إلغاء فهرسة صفحة
الخطأ: إضافة قاعدة Disallow في robots.txt لإزالة صفحة مفهرسة أصلًا.
لماذا هو خطأ: يحجب Disallow الزحف لا الفهرسة. فإذا كانت الصفحة مفهرسة أصلًا، فإن حجب الزحف يعني أن Google لن تعود قادرة على رؤية وسم noindex تضيفه لاحقًا — وقد يبقى العنوان في الفهرس بلا مقتطف.
ما ينبغي فعله بدلًا من ذلك: أضف <meta name="robots" content="noindex"> إلى الصفحة (عبر front matter أو ملف بيانات مجلد)، ودع Google تزحف إليها مدة تكفي لترى الوسم وتحترمه. أضف Disallow فقط للمحتوى الذي لا تريد زحفه أصلًا.
اختبر نفسك: SEO في Eleventy
خمسة أسئلة سريعة عن تحسين موقع Eleventy (11ty) للبحث. اختر إجابة لكل سؤال، ثم تحقق.
موارد تستحق وقتك
كتاباتي ذات الصلة
- JavaScript SEO: A Definitive Guide — الرسم وتكافؤ DOM، ولماذا يقع الناتج الثابت/المسبق الرسم (الافتراضي في Eleventy) في الطرف الأقل مخاطرة.
- The Beginner’s Guide to Technical SEO — موضع بنية الرسم والإعداد داخل الصفحة في الصورة الأكبر.
مداخلاتي
- How Search Works (SlideShare) — شرحي للزحف والرسم والفهرسة والترتيب. (يظل تنبيهي المعتاد قائمًا: “This is my understanding of systems… not going to be 100% complete or accurate.”)
من أرجاء الصناعة
- Eleventy docs — المصدر الأولي لكل ما في هذا الدليل.
- Eleventy Image plugin — مسار Image Transform في v3 إلى صور متجاوبة وآمنة من CLS.
- eleventy-plugin-seo (artstorm) — README ومرجع إعداد إضافة وسوم meta الرائدة.
- @quasibit/eleventy-plugin-sitemap — إنشاء خريطة موقع مع بدائل متعددة اللغات.
- إنشاء خريطة موقع لموقع Eleventy (DEV.to) — شرح واضح لنهج قالب
collections.allاليدوي. - Adding robots.txt to an Eleventy site (Mike Fallows) — نسخ passthrough مقابل إنشاء قالب خاص بالبيئة.
- Add structured data to an Eleventy blog (Maxi Vanov) — أنماط JSON-LD اليدوية خارج BlogPosting.
سجل التغييرات
تم التحديث في 22 أغسطس 2026.
ملخص تحريري وتفاصيل التغيير المسجلة.تفاصيل التغيير
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
المقارنة الكاملة غير متاحة — لم تُؤرشف لقطة سابقة لهذه المراجعة.
تم التحديث في 14 أغسطس 2026.
ملخص تحريري وتفاصيل التغيير المسجلة.تفاصيل التغيير
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
المقارنة الكاملة غير متاحة — لم تُؤرشف لقطة سابقة لهذه المراجعة.
تم التحديث في 17 يوليو 2026.
ملخص تحريري وتفاصيل التغيير المسجلة.تفاصيل التغيير
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
-
تفاصيل التغيير متاحة حاليًا باللغة الإنجليزية.
المقارنة الكاملة غير متاحة — لم تُؤرشف لقطة سابقة لهذه المراجعة.