Markdown لوكلاء الذكاء الاصطناعي: شرح الترويسة Accept وContent-Signal وLink
الإجابة المختصرة: Markdown لوكلاء الذكاء الاصطناعي يعني أن يرد خادمك على العنوان نفسه بنص Markdown خالص بدل HTML حين يطلب العميل ذلك بترويسة الطلب
Accept: text/markdown. أما المتصفحات فتواصل تلقي HTML. ويكفي لذلك بضعة أسطر من شيفرة الخادم أو ميزة في شبكة CDN تفعلها، فيحصل الوكلاء على نص نظيف بلا قوائم ولا سكربتات. أما أثره في الترتيب أو في الاستشهاد بموقعك في إجابات الذكاء الاصطناعي فغير مثبت، فاعتبره إضافة رخيصة فوق HTML مقروء وملف robots.txt جيد وخريطة موقع، لا بديلا عنها.
لماذا يفضل وكلاء الذكاء الاصطناعي صيغة Markdown؟
صفحة الويب مبنية للمتصفحات. فحول النص الذي تريد قراءته توجد قوائم تنقل ولافتة موافقة على ملفات تعريف الارتباط (cookie banner) وسكربتات وأصناف تنسيق وتذييلات. وعين الإنسان تتخطى ذلك كله. أما برنامج عليه أن يمرر الصفحة إلى نموذج لغوي فلا يستطيع تخطيه مجانا، لأن نافذة السياق (context window) في النموذج محدودة، وكل عنصر زائد يستهلك جزءا منها.
يحتفظ Markdown بما يهم القراءة: العناوين والفقرات والقوائم والجداول والروابط. ولهذا يبدو الوكلاء (AI agents) وأدوات مشابهة لهم مرشحين طبيعيين لطلبه، وهو السبب نفسه الذي جعل اقتراح llms.txt مكتوبا بصيغة Markdown. وقد كتبنا عن ذلك الملف في مقالنا ملف llms.txt: ما هو وكيف تنشئه وهل يفيد فعلا.
وتوضح Cloudflare فارق الحجم. ففي إعلانها عن Markdown for Agents تتضمن استجابة المثال ترويسة x-markdown-tokens فيها عدد تقديري من الرموز (tokens)، هو 725 في المثال، فيستطيع العميل أن يقدر كم من السياق ستستهلك الصفحة.
أما ما لا يخبرك به هذا فهو هل تطلب أنظمة البحث الكبرى بالذكاء الاصطناعي صيغة Markdown. يعرض إعلان Cloudflare بيانات من Radar عن استجابات Markdown موجهة إلى OAI-SearchBot. وهذا يثبت أن مثل هذه الاستجابات تحدث، لا أن الزاحف يطلبها؛ ولا توثق OpenAI ذلك. لذلك لا ندعيه. الموثق هو أن بعض الوكلاء يطلبها فعلا، كما توضح الأقسام التالية.
تفاوض المحتوى: Accept وVary وContent-Type
تفاوض المحتوى (content negotiation) جزء قديم من بروتوكول HTTP. فالعنوان الواحد قد تكون له عدة صيغ عرض، ويقول العميل أيها يفضل. وثلاث ترويسات (headers) تحمل الآلية كلها:
| الترويسة | من يرسلها | المعنى |
|---|---|---|
Accept | العميل، في الطلب | أنواع المحتوى التي يريدها، مع أوزان اختيارية (q=0.8) |
Content-Type | الخادم، في الاستجابة | ما أرسله الخادم فعلا، وهو هنا text/markdown; charset=utf-8 |
Vary: Accept | الخادم، في الاستجابة | الاستجابة تعتمد على ترويسة Accept، فلا يجوز للذاكرات المؤقتة (caches) أن تخلط بين النسختين |
يذكر المتصفح text/html أولا ثم يضيف الرمز البديل */* احتياطا. أما الوكيل الذي يريد Markdown فيسميه صراحة، مثل Accept: text/markdown أو Accept: text/markdown, text/html;q=0.8. وتكتب Cloudflare أن وكلاء البرمجة الشائعة، مثل Claude Code وOpenCode، ترسل ترويسات Accept من هذا النوع بالفعل.
والقاعدة التي تحمي الجميع بسيطة: لا ترد بصيغة Markdown إلا إذا ذكر العميل text/markdown صراحة ولم يمنحه وزنا أقل من text/html. ويجب ألا يؤخذ الرمز البديل */* بعين الاعتبار أبدا. وإلا تلقت المتصفحات وأدوات فحص الروابط وروبوتات معاينة المواقع الاجتماعية نص Markdown، وكلها تقبل «أي شيء».
Markdown لوكلاء الذكاء الاصطناعي مع Cloudflare
في 12 فبراير 2026 أعلنت Cloudflare ميزة Markdown for Agents. فإذا كانت الميزة مفعلة لنطاقك (وهي في مرحلة تجريبية beta ومجانية في باقات Pro وBusiness وEnterprise)، فإن الطلب الذي يحمل Accept: text/markdown يتلقى صفحة HTML لديك محولة إلى Markdown لحظة الطلب. ويبقى خادم المصدر لديك دون تغيير.
وتعرض استجابة المثال في الإعلان الترويسات التي ينبغي أن تتوقعها:
content-type: text/markdown; charset=utf-8
vary: accept
x-markdown-tokens: 725
content-signal: ai-train=yes, search=yes, ai-input=yes
هذا أسرع طريق إن كان موقعك يعمل أصلا خلف Cloudflare في إحدى هذه الباقات وبدت النتيجة المحولة سليمة. تحقق من النتيجة بأمر curl (انظر القسم الخاص بالاختبار) قبل أن تعتمد عليها. وإن أردت التحكم الكامل فيما تقوله نسخة Markdown، أو كان موقعك يعمل على منصة أخرى، فابنها بنفسك.
بناؤه بنفسك: مثال قصير بـ Node
تتضمن الخطاطة التالية القواعد المذكورة أعلاه: Markdown فقط عند الطلب الصريح، وVary: Accept على النسختين، وعنوان ثابت هو /index.md للعملاء الذين لا يتفاوضون، ورابط canonical في ترويسة استجابة Markdown. وهو مثال مبسط وليس شيفرة جاهزة للإنتاج.
import http from 'node:http';
import { readFileSync } from 'node:fs';
function wantsMarkdown(accept = '') {
const weight = new Map();
for (const part of accept.toLowerCase().split(',')) {
const [range, ...params] = part.trim().split(';');
const q = params.find((p) => p.trim().startsWith('q='));
weight.set(range.trim(), q ? Number(q.trim().slice(2)) : 1);
}
const md = weight.get('text/markdown') ?? 0;
const html = weight.get('text/html') ?? weight.get('text/*') ?? weight.get('*/*') ?? 0;
return md > 0 && md >= html; // الرمز البديل وحده لا يختار Markdown أبدا
}
http.createServer((req, res) => {
if (req.url === '/index.md' || (req.url === '/' && wantsMarkdown(req.headers.accept))) {
res.writeHead(200, {
'Content-Type': 'text/markdown; charset=utf-8',
'Vary': 'Accept',
'Link': '<https://example.com/>; rel="canonical"',
});
return res.end(readFileSync('index.md'));
}
if (req.url === '/') {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8', 'Vary': 'Accept' });
return res.end(readFileSync('index.html'));
}
res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' }); // كل عنوان آخر يرد بالحالة 404
res.end('Not found');
}).listen(3000);
ثلاث تفاصيل تستحق وقفة:
- Vary على النسختين معا. استجابة HTML تحتاج بدورها إلى
Vary: Accept، وإلا فقد تخزن ذاكرة مؤقتة مشتركة صفحة HTML وتقدمها لوكيل طلب Markdown، أو العكس. - العنوان الثابت. العنوان
/index.md يعيد Markdown دائما مهما أرسل العميل. ويمكن للوكلاء والناس أن يضعوا رابطا إليه، ويعمل حيث يتعذر ضبط الترويسات. وموقعنا نفسه seogrinder.com/index.md يفعل ذلك. - ترويسة canonical. نسخة Markdown صيغة عرض ثانية للصفحة نفسها. وتوثق Google أنه يجوز إرسال
rel="canonical" بوصفها ترويسة HTTP للملفات التي ليست HTML. وهي إشارة قوية إلى أن نسخة Markdown تنتمي إلى الصفحة، لكنها ليست ضمانا (Google).
اكتب ملف Markdown يدويا أو ولده من المصدر نفسه الذي يولد HTML. وفي الحالتين ينبغي أن يقول ما تقوله الصفحة، لكن بلا الإطار المحيط.
ترويسات Link: توجيه الوكلاء إلى وصف موقعك
الترويسة Link في الاستجابة معرفة في RFC 8288. وهي تسمي عنوانا ذا صلة ونوع العلاقة، مثل Link: </llms.txt>; rel="describedby". والعلاقة describedby مسجلة رسميا، ومعناها يناسب الغرض: المورد المرتبط يصف هذا المورد. فالعميل الذي يقرأ ترويسات الاستجابة يعرف أين يوجد وصف موقعك قبل أن يحلل أي جسم للاستجابة.
يرسل seogrinder.com هذه الترويسة في صفحته الرئيسة ويشير بها إلى ملف llms.txt الخاص به. وفي استجابة Markdown تحمل الترويسة Link نفسها علاوة على ذلك علاقة canonical المذكورة أعلاه، مفصولة بفاصلة.
وهل يتبع أي وكيل هذه الروابط اليوم؟ هذا غير مثبت. وكلفتها سطر واحد في إعدادات الخادم.
سطر Content-Signal
في سبتمبر 2025 أطلقت Cloudflare سطرا لملف robots.txt يصرح بما يجوز للزاحف أن يفعله بمحتواك بعد أن يجلبه:
Content-Signal: search=yes, ai-input=yes, ai-train=no
الإشارة search تخص الفهرسة والمقتطفات (snippets)، وai-input تعني استخدام المحتوى مباشرة في إجابات الذكاء الاصطناعي، وai-train تعني تدريب نموذج أو ضبطه. ويصف الصيغة كل من إعلان Cloudflare وموقع contentsignals.org. وهو تصريح وليس حاجزا: لا أحد ملزم باحترامه. وتقول Cloudflare إن هذه الإشارات تعبر عن تفضيلات، وإنها ليست إجراءات تقنية مضادة، وإن بعض الشركات قد تتجاهلها ببساطة. وكما رأيت أعلاه، فإن مثال Cloudflare لـ Markdown يحمل أيضا ترويسة استجابة اسمها content-signal.
مكان هذا السطر في ملف robots.txt لديك، مع سائر القواعد الخاصة بروبوتات الذكاء الاصطناعي. وتجد التفاصيل، بما فيها الخطأ الشائع في المجموعات المنفصلة لكل روبوت، في مقالنا ملف robots.txt لزواحف الذكاء الاصطناعي. ويستخدم ملف robots.txt في seogrinder.com مجموعة مشتركة واحدة لجميع الزواحف وتسعة معرفات لروبوتات الذكاء الاصطناعي، مع Content-Signal: search=yes, ai-input=yes, ai-train=yes.
كيف تختبره بأمر curl
افحص بالأداة نفسها التي كان الوكيل سيستخدمها. الخيار -I يعرض الترويسات فقط:
curl -sI -H "Accept: text/markdown" https://example.com/
ابحث في الاستجابة عن أربعة أشياء: الحالة 200، وcontent-type: text/markdown، وترويسة vary تتضمن Accept، وترويسة link فيها عنوان canonical. وهذه نتيجة seogrinder.com مختصرة إلى الأسطر المهمة:
HTTP/2 200
content-type: text/markdown; charset=utf-8
vary: Accept
link: </llms.txt>; rel="describedby"; type="text/plain", <https://seogrinder.com/>; rel="canonical"
ثم أجر الاختبارات المعاكسة. يجب أن يعيد كل واحد منها text/html:
curl -sI -H "Accept: text/html" https://example.com/
curl -sI -H "Accept: */*" https://example.com/
curl -sI https://example.com/
وفي الختام أرسل ترويسة تفضل Markdown بوزن أعلى، كما يلي:
curl -sI -H "Accept: text/markdown, text/html;q=0.8" https://example.com/
ينبغي أن يفوز Markdown هنا، لأن وزنه أعلى.
كيف يفحص SEOgrinder ذلك
افتح تبويب الجاهزية للذكاء الاصطناعي في SEOgrinder بعد الفحص. تحت «فحوص لوكلاء الذكاء الاصطناعي» سبعة أسطر. ثلاثة منها تخص هذا المقال، وكلها في مجموعة «إضافات»:
- تقديم نص بدل HTML (Markdown Negotiation): يتحقق حين يعيد طلب يحمل
Accept: text/markdownنص Markdown. - إرشاد الوكلاء إلى بياناتك (Link Headers): يبحث عن علاقات مفيدة في ترويسة الاستجابة.
- الإفصاح عن كيفية استخدام المحتوى (Content Signals): يبحث عن سطر
Content-Signalكامل يشملai-trainوsearchوai-input.
وتعرض البنود المفتوحة زر نسخ موجّه الوكيل في السطر مباشرة، أما البنود المتحققة فيظهر لها الزر بعد أن تفتح السطر، مع النص الذي تم العثور عليه. وفي البند المفتوح يصف الموجه ما ينبغي إنشاؤه، ويعرض الحالة الراهنة بأمر curl، ويعطي أمرا للتحقق من النتيجة. وفي البند المتحقق يطلب من مساعد البرمجة لديك أن يراجع الموجود، وألا يغير إلا ما يلزم، وأن يسألك قبل أن يحذف قاعدة لا يفهمها. أما قرارات مثل السماح لزواحف الذكاء الاصطناعي أو حظرها فتبقى لك، وبعض موجهات البنود المفتوحة تقترح قيما نموذجية، فقرر أولا واقرأ الموجه قبل أن تلصقه في Claude Code أو Cursor أو GitHub Copilot أو ChatGPT. ثم اضغط إعادة التحقق لإعادة الفحص. تبقى التقارير محفوظة مؤقتا حتى 24 ساعة، وهذا الزر يفرض فحصا جديدا (بضع مرات في الساعة).
ويقول SEOgrinder بصراحة عن مجموعة «إضافات»: هذه اقتراحات من جهات مصنعة بعينها، ولم يثبت لها تأثير في Google. كما أن الأداة لا تقيس هل يذكر ChatGPT أو Gemini أو Perplexity علامتك التجارية فعلا. إنها تفحص الأساس التقني: هل تستطيع الآلات الوصول إلى صفحتك وقراءتها؟
هل يستحق الجهد؟
يتوقف ذلك على ما يقدمه موقعك. فالوثائق وصفحات المراجع والأدلة الطويلة وقواعد المعرفة هي نوع المحتوى الذي يجلبه الوكلاء ليجيبوا عن سؤال محدد، ونسخة Markdown نظيفة مفيدة هناك. أما متجر صغير أو نشاط محلي من خمس صفحات فالأفضل أن يصرف وقته على الأساسيات: نص حاضر في HTML دون JavaScript، وملف robots.txt يسمح لروبوتات البحث بالدخول، وخريطة موقع.
وفيما يخص ميزات Google نفسها بالذكاء الاصطناعي، تقول Google إنه لا توجد متطلبات إضافية للظهور في «النظرة العامة بالذكاء الاصطناعي» (AI Overviews) أو في AI Mode، ولا تحسينات خاصة أخرى لازمة؛ وتفاصيل ذلك في وثائق Google. فنسخة Markdown ليست شرطا هناك. وقد تتصرف مساعدات أخرى بطريقة مختلفة، لكن لا أحد يستطيع أن يعد بأن مساعد ذكاء اصطناعي سيذكر صفحتك.
الأخطاء الشائعة
- غياب ترويسة Vary. بدون
Vary: Acceptقد تقدم ذاكرة مؤقتة أو شبكة CDN النسخة الخطأ للزائر التالي. - ذاكرة مؤقتة في المقدمة تتجاهل الترويسة. اختبر عبر العنوان العام، لا مقابل خادم المصدر وحده.
- Markdown للمتصفحات. إذا عامل فحصك الرمز البديل
*/* على أنه طلب لـ Markdown فسيرى الزوار نصا خاما. اختبر بمتصفح عادي. - غياب رابط canonical. قد يتعامل محرك البحث عندئذ مع نسخة Markdown على أنها صفحة مستقلة. اخترنا ترويسة canonical بدل
noindexلأن النسخة المتفاوض عليها تقع على العنوان نفسه الذي تقع عليه الصفحة. - نسخة Markdown تقول شيئا مختلفا. أبق المحتوى مطابقا لصفحة HTML، ما عدا الإطار. وليس لدينا مصدر عن كيفية تعامل محركات البحث مع الفروق بين النسختين، فأبقهما متطابقتين.
- ملف قديم. ملف index.md مكتوب يدويا ويسرد عروض العام الماضي يضلل الوكلاء. ولده من مصدر الصفحة، أو ضعه في قائمة مراجعتك.
- صفحة HTML فارغة. إذا لم يكن في HTML نفسه نص إلا بعد تشغيل JavaScript، فلن يعالج Markdown للوكلاء المشكلة عند بقية العملاء، مثل معاينات الشبكات الاجتماعية. ويبلغ SEOgrinder عن الصفحات التي لا تبنى إلا داخل المتصفح.
الأسئلة الشائعة
هل Markdown لوكلاء الذكاء الاصطناعي عامل ترتيب؟
لا يوجد دليل على ذلك. اعتبره صيغة تسليم للآلات لا وسيلة لرفع الترتيب.
هل يطلب ChatGPT أو Claude أو Perplexity صيغة Markdown؟
تكتب Cloudflare أن وكلاء البرمجة مثل Claude Code وOpenCode يرسلون Accept: text/markdown فعلا. أما زواحف البحث لدى الشركات الكبرى فلا يوجد توثيق بأنها تطلبها؛ وبيانات Radar لدى Cloudflare تعرض استجابات Markdown موجهة إلى OAI-SearchBot، وهذا ليس دليلا على ترويسة طلب. لذلك فالأمر غير مثبت.
هل أحتاج إلى Cloudflare؟
لا. تقدم Cloudflare التحويل بوصفه ميزة (في مرحلة beta وفي باقات Pro وBusiness وEnterprise). ويبين مثال Node أعلاه أن بضعة أسطر من شيفرة الخادم تكفي، ويمكن بناء القواعد نفسها في أي خادم أو إطار عمل.
هل أستخدم تفاوض المحتوى أم عنوانا منفصلا بامتداد md؟
يمكنك الاثنين معا. العنوان الثابت مثل /index.md يسهل وضع رابط إليه واختباره. أما التفاوض فيبقي عنوانا واحدا لكلا الجمهورين. ويقدم seogrinder.com الاثنين معا لصفحته الرئيسة.
هل سيرى الزوار العاديون نسخة Markdown يوما ما؟
لا، إذا التزمت بالقاعدة المتعلقة بالرمز البديل: لا يرد الخادم بـ Markdown إلا حين يذكر العميل text/markdown صراحة ولا يكون وزنه أدنى من text/html.
خطوتك التالية
شغل الفحص المجاني في SEOgrinder وافتح تبويب الجاهزية للذكاء الاصطناعي. انظر إلى الأسطر الثلاثة في «إضافات» الخاصة بـ Markdown وLink Headers وContent Signals، وقرر هل موقعك من النوع الذي يقرؤه الوكلاء. فإن كان كذلك فانسخ موجّه الوكيل، ودع مساعدك ينفذ التعديل، وتحقق من النتيجة بأمر curl، ثم أعد الفحص.