جب AI اسسٹنٹ کسی سوال کا جواب دیتا ہے، تو یہ جملے کے چند صفحات نکالتا ہے اور ان کا حوالہ دیتا ہے۔ یہ کوئی معمہ یا وائب نہیں ہے کہ آیا آپ کا صفحہ غیر مقفل ہے یا نہیں۔ یہ HTML کی مکینیکل خصوصیات کا ایک مجموعہ ہے جس کی پیمائش، اسکور اور ترمیم کی جا سکتی ہے۔
یہ ٹیوٹوریل آپ کو ایک درست آڈٹ کے بارے میں بتاتا ہے جو میں نے اپنی سائٹ پر چلایا، چھ پوشیدہ ٹائٹل ٹیگز ملے، ایک سنگل کمٹ فکس، اور ایک CI گیٹ اس مسئلے کو دوبارہ ہونے سے روکنے کے لیے۔
میری ویب سائٹ نے ایکسٹریکٹ ایبلٹی میں 100 میں سے 65 اسکور کیے ہیں۔ اس کی وجہ پانچ UI کارڈ اجزاء تھے جو ٹائٹل کو اس طرح پیش کرتے ہیں:
ٹیگ ان چھ عنوانات کو ARIA-محفوظ پیراگراف تک کم کر کے ایک بھی مرئی پکسل کو تبدیل کیے بغیر یا مواد کا ایک لفظ ہٹائے بغیر، ہمارے پاس 100 صفحات تھے۔
پچھلے 90 دنوں میں، مائیکروسافٹ کے بنگ ویب ماسٹر ٹولز نے میرے 33 صفحات پر 1,600 AI حوالہ جات کی اطلاع دی ہے۔ نکالنا پائپ لائن کا وہ مرحلہ ہے جسے یہ ٹیوٹوریل آڈٹ کرنے کا طریقہ سکھاتا ہے۔
انڈیکس
AI انجن کا حوالہ تین مراحل والی مشین پائپ لائن کا آخری مرحلہ ہے، اور صفحہ کو تمام مراحل سے گزرنا چاہیے۔
-
تلاش کریں: انجن کے کرالر کو صفحہ بازیافت کرنے کی اجازت ہے۔
-
نکالنا: ماڈل کو مارک اپ میں واضح اور آزاد جواب ملتا ہے۔
-
سے شروع: انجن کو اس بارے میں کافی اعتماد ہے کہ یہ کس نے کہا ہے کہ وہ آپ کا نام اپنے ساتھ دکھاتا ہے۔
زیادہ تر AI مرئیت کے مشورے اقدامات 1 (robots.txt، sitemap، llms.txt) اور 3 (اسکیما، ہستی کے سگنل) پر توجہ مرکوز کرتے ہیں۔ مرحلہ 2 وہ جگہ ہے جہاں مجھے سب سے سستی جیت ملی کیونکہ یہ خالص HTML انجینئرنگ ہے اور خاموشی سے ناکام ہوجاتی ہے۔ وہ صفحات جو اچھی خاصیتوں اور اچھی خاصیتوں کو تلاش کرتے ہیں لیکن انہیں غلط طریقے سے نکالتے ہیں صرف جوابات میں ظاہر نہیں ہوتے ہیں اور آپ کو بتانے کے لیے کچھ نہیں ہے کہ کیوں۔
نکالنے کی صلاحیت یہ مرحلہ 2 کا ایک قابل پیمائش ورژن ہے۔ کیا پیش کردہ HTML پر تشریف لے جانے والا تجزیہ کار واضح طور پر دائرہ کار کے عنوانات کے تحت خود ساختہ جوابی بلاکس تلاش کر سکتا ہے؟ اس ٹیوٹوریل میں آڈٹ آپ کو 0 سے 100 تک سکور کرنے کے لیے پانچ چیک استعمال کرتا ہے۔ آپ ہر ٹیسٹ کو خود چیک کر سکتے ہیں۔
| چیک کریں | ٹیسٹ کا ہدف | وزن |
|---|---|---|
| F1 | ہر H2 کے تحت پہلا جملہ اکیلے جواب کے طور پر کھڑا ہوتا ہے۔ | 30 |
| F2 | صفحہ پر پہلے 200 ٹوکن براہ راست جوابات پر مشتمل ہیں۔ | 20 |
| F3 | ہر H2 سیکشن 40 سے 60 الفاظ کے جواب کے ساتھ شروع ہوتا ہے۔ | 20 |
| F4 | H2/H3 عنوانات کا تناسب صارفین کے درج کردہ سوالات کے طور پر ظاہر کیا گیا ہے۔ | 20 |
| F5 | FAQ سیکشن مضمون کے فوٹر میں واقع ہے۔ | 10 |
ایکسٹریکٹ ایبل بینڈ میں 75 یا اس سے زیادہ کا اسکور ہے۔ 40-74 جزوی طور پر نکالنے کے قابل ہیں۔ 40 سے نیچے کی کوئی بھی چیز نہیں نکالی جا سکتی۔ بینڈز AI ویزیبلٹی ریڈینس فریم ورک سے آتے ہیں جسے میں برقرار رکھتا ہوں، لیکن پانچ چیک خود انجن اگنوسٹک ہیں۔ ہم انکوڈ کرتے ہیں کہ کس طرح سرچ بڑھانے کا نظام ٹکڑوں کے صفحات کو عنوان کے لحاظ سے انکوڈ کرتا ہے، ٹکڑوں کو داخل کرتا ہے، اور ٹکڑوں کے ابتدائی جملوں کو اٹھاتا ہے جو استفسار سے میل کھاتے ہیں۔
اس ٹیوٹوریل کی اہم تفصیلات میں شامل ہیں: شکرگزاری ہر لمحہ اہم ہے۔ ,
پیش کردہ DOM میں یہ وہ عنوان نہیں ہے جو آپ نے CMS میں لکھا ہے۔ وہ عنوان جسے جزو لائبریری برآمد کرتی ہے۔ وہ خلا ہے جہاں میری چھ پوشیدہ ناکامیاں رہتی تھیں۔
شرطیں
-
ایک لائیو ویب سائٹ جسے آپ پیمائش اور تعینات کر سکتے ہیں (کوئی بھی اسٹیک۔ میری مثال SvelteKit ہے، تمام ترامیم React، Vue یا سادہ HTML میں تبدیل ہو جاتی ہیں)۔
-
Python 3.10 یا اس سے زیادہ
requestsاورbeautifulsoup4(pip install requests beautifulsoup4) -
صفحہ کے انتخاب کے لیے Search Console ڈیٹا (Google Search Console یا Bing Webmaster Tools) تک رسائی حاصل کریں۔
-
CI سسٹم (مثال کے طور پر GitHub ایکشنز کا استعمال کرتا ہے)
-
تقریباً 90 منٹ: آڈٹ کے لیے 20 منٹ، نظر ثانی کے لیے 40 منٹ، CI گیٹ کے لیے 30 منٹ۔
مرحلہ 1: قابل اطمینان صفحات کا انتخاب کریں۔
پورے سائٹ کے نقشے کا آڈٹ نہ کریں۔ پہلے سے تعینات صفحات کا آڈٹ کریں۔ اس کی وجہ یہ ہے کہ اقتباس میں ترمیم پہلے سے حاصل کردہ تلاش کے نتائج کو دوگنا کردیتی ہے۔
گوگل سرچ کنسول کھولیں، پرفارمنس پر جائیں، اپنے صفحات کو پچھلے 28 دنوں کے نقوش کے مطابق ترتیب دیں، اور دیکھیں کہ آپ کی تقسیم دراصل کہاں ہے۔
اس برآمد کے لیے میری رپورٹ کا سرفہرست یہ ہے (21 جولائی):
| صفحہ | نقوش کی تعداد (28 دن) | کلکس کی تعداد | اوسط پوزیشن |
|---|---|---|---|
| /blog/claude-fable-5-vs-opus-4-8 | 17,315 | 462 | 6.2 |
| /blog/how-i-build-polymarket-trading-bot | 13,649 | 104 | 7.6 |
| /blog/claude-code-production-transaction-bot | 6,540 | 94 | 8.5 |
| /blog/aeo-answer-engine-optimization-explained | 4,189 | 1 | 8.2 |
انفرادی پوسٹس تاثرات پر حاوی ہیں، لیکن دیکھیں کہ ان سب میں کیا مشترک ہے۔ اس کا مطلب ہے کہ وہ سب ایک ہی ترتیب اور کارڈ کے اجزاء کے ساتھ پیش کیے گئے ہیں۔
چونکہ ایک جزو میں ترمیم کرنے سے بیک وقت ان تمام صفحات میں ردوبدل ہوتا ہے جو اس جزو کو استعمال کرتے ہیں، ہم نے آڈٹ کا دائرہ ٹاپ 3 سے 5 تک کر دیا۔ مواد کی فہرست کا صفحہ انفرادی پوسٹس کے بجائے: ہوم پیج، بلاگ انڈیکس، موضوع یا زمرہ کا مرکز۔
انڈیکس کا صفحہ زیادہ تر دہرائے جانے والے کارڈز پر مشتمل ہوتا ہے، اس لیے اجزاء کو پہنچنے والے نقصان کو اس کی سب سے زیادہ مرتکز شکل میں دکھایا جاتا ہے، جس میں ترمیمات ہر چیز پر پھیل جاتی ہیں۔
میں نے ان تینوں کا انتخاب کیا۔
-
chudi.dev/(ہوم پیج) -
chudi.dev/blog(تحریر کا اشاریہ) -
chudi.dev/topics(موضوع کا مرکز)
نمونے کو چیک کریں: اب آپ کے پاس 3 سے 5 URLs کی فہرست ہے۔ وہ فہرست آڈٹ کا دائرہ ہے۔
مرحلہ 2: 5 چیک کریں۔
آپ Python کی تقریباً 60 لائنوں میں پانچ ٹیسٹ اسکور کر سکتے ہیں۔ یہ اس آڈٹ پروگرام کا جان بوجھ کر کم سے کم ورژن ہے جسے میں پروڈکشن میں چلاتا ہوں۔ ہم دو چیکس (F3 اور F4) نافذ کرتے ہیں جو جزوی بدعنوانی کو پکڑتے ہیں اور ایک مکمل عنوان مردم شماری کرتے ہیں۔ یہ بگ کلاس تلاش کرنے کے لیے کافی ہونا چاہیے جسے یہ ٹیوٹوریل ٹھیک کرتا ہے۔
import re
import sys
import requests
from bs4 import BeautifulSoup
QUESTION = re.compile(
r"^s*(what|how|why|when|where|who|which|is|are|can|do|does|should|will|did)b|?s*$",
re.IGNORECASE,
)
def audit(url):
html = requests.get(url, timeout=8, headers={"User-Agent": "extract-audit/1.0"}).text
soup = BeautifulSoup(html, "html.parser")
headings = [(h.name, " ".join(h.get_text().split())) for h in soup.find_all(["h1", "h2", "h3"])]
subheads = [(n, t) for n, t in headings if n in ("h2", "h3")]
question_rate = (
sum(1 for _, t in subheads if QUESTION.search
)
in_band = 0
h2s = soup.find_all("h2")
for h2 in h2s:
first_p = h2.find_next("p")
words = len(first_p.get_text().split()) if first_p else 0
if 40 <= words <= 60:
in_band += 1
print(f"URL: {url}")
print(f"Heading census ({len(headings)} total):")
for name, text in headings:
print(f" <{name}> {text[:70]}")
print(f"F4 question-format rate: {question_rate:.1%} (target >= 50%)")
print(f"F3 sections opening in the 40-60 word band: {in_band}/{len(h2s)}")
if __name__ == "__main__":
audit(sys.argv[1])
فہرست میں ہر صفحے کے لیے اسے چلائیں۔
python3 extract_audit.py https://yoursite.com/
مردم شماری کی سرخی ایسی چیز ہے جس پر توجہ دی جائے۔ تجزیہ کار ہر H1/H2/H3 کو ترتیب سے دیکھتا ہے، جو اکثر وہ خاکہ نہیں ہوتا ہے جو اس کے خیال میں اس نے شائع کیا ہے۔
اگر آپ 0 سے 100 تک وزن والے پانچوں چیکوں کے لیے اسکور کا ایک ورژن چاہتے ہیں، تو citability.dev کا خودکار آڈٹ پانچوں چیکوں کے علاوہ تلاش اور انتساب کی تہوں کو چلائے گا۔ مندرجہ بالا دستی ورژن اس ٹیوٹوریل کو مکمل کرنے کے لیے کافی ہے۔
نمونے کو چیک کریں: ٹرمینل آؤٹ پٹ فی صفحہ دشاتمک مردم شماری، F4 تناسب، اور F3 بینڈ شمار دکھا رہا ہے۔ اسکرین شاٹ لیں۔ یہ آپ کی سابقہ حالت ہے۔
مرحلہ 3: ناکامی کا درجہ پڑھیں
ترمیم کی کمٹ ہسٹری (2026-05-23) سے ترمیم کرنے سے پہلے میرے ہوم پیج کا آڈٹ۔
-
سکور: 65/100، جزوی نکالنا ممکن ہے۔حد سے نیچے 10 پوائنٹس
-
F4 سوال کی شکل کا تناسب: 26.7%50% گزرنے والی لائن سے بالکل نیچے
-
وجہ: مردم شماری میں 10 سے زیادہ عنوانات ہیں جنہیں میں نے کبھی عنوانات کے طور پر درج نہیں کیا۔
مردم شماری نے وجہ واضح کردی۔ بلاگ پوسٹ کے عنوانات اور پروجیکٹ کے ناموں جیسی تفصیلات جان بوجھ کر تیار کردہ سیکشن کے عنوانات کے آگے ڈھیر کی گئی تھیں ("میں کیسے دیکھوں کہ لائیو چل رہا ہے؟”، "سرچ ہیڈر کیا ہیں؟”)۔
. میں نے ان میں سے ایک بھی ٹائٹل فیلڈ میں نہیں ڈالا۔ میرے پاس اپنے کارڈ کا جزو ہے۔
یہ ایک عام سبق ہے، اور اصولی طور پر یہ قابل ذکر ہے:
ڈینومینیٹر ایک ڈیزائن کا مسئلہ ہے۔ اجزاء کے ذریعہ خارج ہونے والے تمام عنوانات کو ہر تناسب کی جانچ پڑتال کے ڈینومینیٹر میں شامل کیا جاتا ہے کہ نکالنے کا تجزیہ کار چلتا ہے۔ H3 جیسے 10 کارڈ کے عنوان کا مطلب ہے کہ آپ کے احتیاط سے تیار کیے گئے سوال کے عنوان کو مارک اپ کے ذریعے 10 سے 4 کر دیا گیا ہے جسے آپ کبھی نہیں دیکھیں گے۔
ناکامی کی کلاس کا نقشہ درج ذیل اصلاحات پر ہے:
| مردم شماری کی علامات | ناکامی کا درجہ | ترمیم (اقدامات) |
|---|---|---|
| آپ نے جو عنوانات کبھی نہیں لکھے وہ کارڈ کے سائز کے کلسٹرز میں دہرائے جاتے ہیں۔ | جزو سے نکلا ہوا عنوان | مرحلہ 4 اور 5 |
| آپ کا H2 ایک بیان ہے، سوال نہیں۔ | تحریری عنوان کا انداز | سوالیہ انداز میں بیان کیا گیا۔ |
| سیکشنز یا تو 15 الفاظ کے ٹیزر یا 120 الفاظ کے گببرش سے شروع ہوتے ہیں۔ | رسپانس بینڈ مس | اپنے اوپنر کو 40-60 الفاظ تک کم کریں۔ |
| کوئی FAQ بلاک نہیں۔ | F5 غائب سطح | فوٹر میں ایک شامل کریں۔ |
میں نے چاروں کلاسیں تین صفحات میں لیں۔ کمپوننٹ کلاس سب سے بڑا سنگل اسکورر تھا، اور چونکہ یہ ایک ایسی کلاس ہے جسے CMS پڑھ کر کوئی نہیں اٹھاتا، اس لیے اسے یہاں زیادہ گہرائی سے علاج ملتا ہے۔ (ریکارڈ کے لیے، میرے دوسرے صفحات میں کی گئی تبدیلیاں بالکل ویسا ہی ہیں جیسا کہ جدول میں دکھایا گیا ہے: میرے فریم ورک صفحہ پر دو H2s کو سوال کی شکل میں تبدیل کر دیا گیا تھا، اور موضوع کے مرکز کے اوپنر کو 37 الفاظ سے بڑھا کر تقریباً 50 الفاظ تک کر دیا گیا تھا تاکہ جواب کے دائرہ کار میں فٹ ہو سکیں۔)
نمونے کو چیک کریں: آپ کی مردم شماری ناکامی کے چار درجوں کے ساتھ بیان کی گئی ہے۔ ان عنوانات کی تعداد شمار کریں جو آپ نے نہیں لکھے ہیں۔
مرحلہ 4: جعلی عنوان کو ظاہر کرنے والا جزو تلاش کریں۔
مردم شماری کے مطالعے سے معلوم ہوا ہے کہ جعلی عنوانات موجود ہیں۔ ایک جزو لائبریری آپ کو بتاتی ہے کہ وہ جزو کہاں سے آتا ہے۔ غیر مواد کے اجزاء کی ڈائریکٹریوں کے اندر ٹائٹل ٹیگز کے لیے گریپ:
grep -rn "
(رد عمل: grep -rn ".vue.)
میری سائٹ نے 5 اجزاء میں 6 ٹائٹل سائٹیں دکھائیں۔
| عنصر | جاری | مثال |
|---|---|---|
BlogCard.svelte |
پوسٹ کا عنوان |
2 |
BlogCardFeatured.svelte |
پوسٹ کا عنوان |
1 |
ProductCard.svelte |
پروڈکٹ کا نام |
1 |
ProjectCard.svelte |
پروجیکٹ کا نام |
1 |
JourneyCard.svelte |
سنگ میل کا عنوان |
1 |
چھ ٹیگ اس وقت تک زیادہ نہیں لگتے جب تک آپ کو یاد نہ ہو کہ کارڈ دہرائے جاتے ہیں۔ 1 بلاگ انڈیکس رینڈرنگ 10 BlogCard 10 مثالیں انجیکشن کریں۔
جزو لائبریری ایسا کیوں کرتی ہے؟ کارڈ کے عنوان کی وجہ سے ظاہری شکل جیسا کہ عنوان کہتا ہے، اس کی وجہ یہ ہے کہ رسائی کے رہنما خطوط صحیح طور پر سیمنٹک HTML کی حوصلہ افزائی کرتے ہیں۔
غلطیاں زیادہ باریک ہوتی ہیں۔ کارڈ کا عنوان ہے۔ کسی لیبل کو کسی اور دستاویز سے لنک کریں۔سیکشن کا عنوان نہیں۔ یہ دستاویز صفحہ کا اصل خاکہ ذیل میں دکھائے گئے ہر پوسٹ کے عنوان کے بجائے "یہاں میری نمایاں پوسٹس ہیں” ہے۔ HTML میں "دوسرے صفحہ کے عنوان” کے لیے کوئی ٹیگ نہیں ہے، اس لیے جزو H2/H3 پر ڈیفالٹ ہو جاتا ہے، اور کوئی بھی تجزیہ کار جو صفحہ کو نیویگیٹ کرتا ہے وہ غلط خاکہ کا وارث ہوگا۔
نمونے کو چیک کریں: اوپر کی طرح ایک ہی جدول: اجزاء، ٹیگز بنائے گئے، مثالوں کی تعداد۔ یہ آپ کی ترمیم کی فہرست ہے۔
مرحلہ 5: رسائی کو برقرار رکھتے ہوئے عنوان کی سطح کو کم کریں۔
قطعی درستگی، تبادلہ
یا , has a real cost: screen reader users navigate by heading structure, and card titles are genuinely useful landmarks when scanning a list of posts. Deleting the semantics entirely trades an AI-extraction win for an accessibility loss. That trade isn’t necessary.
The fix that preserves both is ARIA heading demotion: replace the literal tag with a paragraph carrying role="heading" اور واضح aria-level.
اختلافات سے پہلے ایک اہم نوٹ: ARIA کا پہلا اصول مقامی HTML عناصر کی حمایت کرنا ہے، اور یہ اصلاح اس کی خلاف ورزی نہیں کرتی ہے۔ یہ اصول لاگو ہوتا ہے اگر متن دراصل موجودہ دستاویز کا عنوان ہے، اور مرحلہ 4 کا پورا نقطہ یہ ثابت کرنا ہے کہ یہ کارڈ کا عنوان نہیں ہے۔ لیبل کو کسی اور دستاویز سے لنک کریں۔
مقامی
یہاں میرے اصل اختلافات ہیں: BlogCard.svelteلپیٹنے کے علاوہ کچھ نہیں بدلا۔
-
{post.title}
-
+
کیا تبدیلیاں آتی ہیں اور کیا نہیں:
-
معاون ٹیکنالوجیز بھی اسی جائزہ کو دیکھتے ہیں۔
. اسکرین ریڈرز جو عنوان کے ذریعے نیویگیٹ کرتے ہیں وہ اب بھی یہاں رکیں گے اور آپ کو سطح بتائیں گے۔role="heading"پلسaria-level="3"ARIA معیار کے برابر۔ -
بصری انداز وہی رہتا ہے۔ تمام کلاسز عناصر پر برقرار ہیں۔ 0 پکسلز منتقل کریں۔
-
آپ کا مواد وہی رہے گا۔ ترمیم 0 الفاظ کو ہٹا دیتی ہے۔ یہ ضروری ہے کیونکہ زیادہ تر نکالنے کے مشورے آپ کو اسے دوبارہ لکھنے کو کہتے ہیں۔ لیکن اس قسم کے بگ کو دوبارہ لکھنے کی ضرورت نہیں ہے۔
-
HTML ٹیگ پارسر حساب کرنا بند کر دیتا ہے۔ لٹریلز کے حساب سے پائپ لائن کے ٹکڑے نکالنا
h1/h2/h3بھتہ خوری کارڈ کا عنوان مردم شماری سے غائب ہو جاتا ہے، آپ کے بنائے ہوئے عنوان میں ڈینومینیٹر دوبارہ ظاہر ہوتا ہے، اور ایڈجسٹ شدہ فیصد گزرنا شروع ہو جاتے ہیں۔
مرحلہ 4 ترمیم کی فہرست میں تمام سائٹس پر ایک ہی لائن کی تبدیلی کا اطلاق کریں۔ میرا ایک عہد تھا جس میں 5 اجزاء، 6 واقعات شامل تھے۔
پھر دوبارہ تعینات کریں اور دو مراحل کے آڈٹ کو دوبارہ چلائیں۔ میرا ہوم پیج 65 سے بدل کر . 100/100 نکالنے کے قابل پوسٹ ڈسٹری بیوشن ریسکورنگ میں، سوال کے فارمیٹس کا فیصد 26.7% سے 50% حد سے اوپر تک برآمد ہوا۔ کیونکہ میں نے جو چار سوالات کے عنوانات لکھے ہیں وہ صفحہ پر صرف H2/H3 آبادی کے طور پر ختم ہوئے۔
نمونے کو چیک کریں: یہ پچھلے اسکرین شاٹ کے آگے آڈٹ کے بعد ٹرمینل آؤٹ پٹ ہے۔ عنوان کی مردم شماری میں اب صرف وہی عنوانات شامل ہونے چاہئیں جو آپ نے جان بوجھ کر تخلیق کیے ہیں۔
مرحلہ 6: CI میں گیٹ میں ترمیم
نکالنے کے اسکور کے بارے میں تکلیف دہ حقیقت یہ ہے: بہتی ہے۔ مواد میں تبدیلی کے طور پر نئے کارڈز بھیجے جاتے ہیں، اجزاء شامل کیے جاتے ہیں، یا انہیں دوبارہ ڈیزائن کیا جاتا ہے۔
میرا ہوم پیج، اس ٹیوٹوریل (21 جولائی) کو لکھتے وقت ریئل ٹائم میں جائزہ لیا گیا، 80 پر ہے۔ اب بھی نکالا جا سکتا ہے، لیکن ترمیم کے بعد 100 سے کم ہے۔ اس کی وجہ یہ ہے کہ پچھلے چند ہفتوں میں ہوم پیج کو دوبارہ ڈیزائن کرنے کی وجہ سے سیکشن کا ڈھانچہ دوبارہ تبدیل ہو گیا ہے۔ Blog Index اور Topic Hub دونوں اب بھی 100 پوائنٹس اسکور کرتے ہیں۔
یہ بہاؤ اس ٹیوٹوریل کے پائیدار نتائج کو حل نہیں کرتا ہے۔ یہ رجعت کا دروازہ ہے۔ اگر کوئی غائب ہے، تو اگلا معنی خیز جزو ایک نیا فراہم کرتا ہے۔
میرا ایک GitHub ایکشن ورک فلو کے ساتھ چلتا ہے جو ہر کامیاب پروڈکشن تعیناتی سے شروع ہوتا ہے اور اگر آڈٹ شدہ URL ایکسٹریکٹ ایبل بینڈ سے باہر آتا ہے تو مشکل ناکام ہو جاتی ہے۔
name: Post-Deploy Extractability Audit
on:
deployment_status:
jobs:
audit:
if: |
github.event.deployment_status.state == 'success' &&
github.event.deployment.environment == 'Production'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- run: pip install requests beautifulsoup4
- name: Audit extractability on the live URLs
run: |
for url in "https://yoursite.com/" "https://yoursite.com/blog"; do
python3 scripts/extract_audit.py "$url" --min-score 75 || exit 1
done
کم از کم آڈیٹر CI تیار کرنے کے لیے، درج ذیل کو شامل کریں: --min-score ایک جھنڈا جو حد سے نیچے غیر صفر سے باہر نکلتا ہے۔ یہ مرحلہ 2 اسکرپٹ میں 5 لائن کی تبدیلی ہے (ان ٹیسٹوں سے وزنی اسکور کا حساب لگائیں جو آپ لاگو کرتے ہیں، ان کا موازنہ کریں، sys.exit(1))۔
میرے گیٹ کا پروڈکشن ورژن پانچ URLs کا آڈٹ کرتا ہے اور Lighthouse ایکسیسبیلٹی تھریشولڈز کو ایک ہی ورک فلو میں اسٹیک کرتا ہے، لہذا پانچ سطحی ARIA ڈیموشن معاہدہ دونوں سمتوں میں نافذ ہے۔ نکالنا 75 سے نیچے نہیں جا سکتا اور رسائی 95 سے نیچے نہیں جا سکتی۔ یہ جوڑا کلیدی ہے۔ دونوں رکاوٹیں ایک دوسرے کو ایماندار رکھتی ہیں۔
نمونے کو چیک کریں: جب میں جابز ٹیب سے CI چلاتا ہوں تو فیڈ ناکام ہو جاتی ہے۔ --min-score 101 (یہ ثابت کریں کہ آپ ناکام ہوسکتے ہیں) 75 پوائنٹس کے ساتھ پاس کریں۔
اصل میں کیا منتقل ہوا

میرے تین صفحات کے اسکور بورڈ ایک ہی آلے کے تمام نمبر ہیں۔
| صفحہ | ترمیم سے پہلے (مئی) | ترمیم کے بعد | ریئل ٹائم دوبارہ آڈٹ (21 جولائی) |
|---|---|---|---|
| ہوم پیج | 65 جزوی نکالنا ممکن ہے۔ | 100 نکالنے کے قابل | 80 نکالنے کے قابل |
| بلاگ انڈیکس | معیار سے نیچے | 100 نکالنے کے قابل | 100 نکالنے کے قابل |
| موضوع مرکز | معیار سے نیچے | 100 نکالنے کے قابل | 100 نکالنے کے قابل |

ڈاؤن اسٹریم میٹرکس جن کا آڈیٹنگ فراہم کرنے کے لیے موجود ہے: Bing Webmaster Tools کی AI پرفارمنس رپورٹ (اس وقت موجود واحد فریق اول کا AI حوالہ ڈیش بورڈ؛ آپ اسے سرچ پرفارمنس کے تحت BWT پراپرٹی میں تلاش کر سکتے ہیں) میری سائٹ کی آمدنی کو ظاہر کرتی ہے۔ 19 جولائی کو ختم ہونے والے 90 دنوں میں 33 صفحات پر 1,600 AI حوالہ جاتMicrosoft Copilot اور پارٹنر اسسٹنٹس کے ذریعے تقویت یافتہ۔ یہ تعداد اپریل کے آخر میں 671 تھی، جب قرارداد شروع ہوئی تھی، اور جون کے آخر میں تقریباً 1,500 تھی۔
وجہ پر ایک نوٹ کیونکہ یہ وہ جگہ ہے جہاں AI کی مرئیت کا مواد عام طور پر زیادہ فروخت ہوتا ہے۔ حوالہ جات میں اضافہ واضح طور پر نکالنے کے کام سے منسوب نہیں ہے، لیکن نکالنے کے کام سے منسلک ہے۔ اسی مدت کے دوران، ہم نے مواد فراہم کیا، تلاش کے مسائل کو حل کیا، اور عمومی سرچ ٹریفک میں اضافہ کیا۔
میں جس چیز کا دفاع کر سکتا ہوں: آڈٹ سکور مکمل طور پر کارآمد ہے (ایک کمٹ اس سے پہلے اور بعد میں ایک ہی ٹول کو حرکت دیتا ہے)، میکانزم انجن کے رویے کو دستاویزی شکل دیتا ہے (ٹائٹل پر مبنی چنکنگ)، اور حوالہ جات ترمیم کے بعد بھی مرکب ہوتے رہتے ہیں۔ جو میں آپ کو نہیں دے سکتا وہ ایک کنٹرول شدہ تجربہ ہے جو چھ ٹائٹل ٹیگز کو الگ کرتا ہے۔ واقعی کوئی نہیں کر سکتا۔
میں نے کیا انکار کیا اور کیوں؟
انتخاب کا تعصب اس طرح کے سبق کے لیے ناکامی کا موڈ ہے۔ تو یہاں ہے جس پر میں نے غور کیا اور کیا نہیں کیا:
-
صفحہ کاپی دوبارہ لکھیں: یہ معیاری نکالنے کا مشورہ ہے۔ لیکن مردم شماری کو مسترد کر دیا گیا کیونکہ اس نے نثری مسائل نہیں بلکہ ساختی مسائل کا انکشاف کیا تھا۔ میں نے جو حصہ لکھا تھا وہ گزر چکا ہے۔ اسے دوبارہ لکھنے میں دن لگیں گے اور پیمائش کو دھندلا جائے گا۔
-
صاف
/demotion without ARIA: Two fewer attributes per element. I rejected this because it deletes real navigation structure for screen reader users. The audit wouldn’t have noticed the difference, but people would’ve. -
Stuffing FAQ schema on every page: F5 is worth 10 points and JSON-LD is cheap. I rejected this as the first move because it treats the symptom with metadata while leaving the false outline in place. Schema asserts what your page means but the DOM is what gets chunked. Fix the DOM first.
-
Auditing every page on the sitemap: Completeness is seductive. I rejected this because extraction fixes multiply retrieval, and most pages have little retrieval to multiply. Three index pages covered the highest-impression surfaces and every card component in one pass.
-
Chasing a 100 score as a standing target: After watching my homepage drift from 100 to 80 through an unrelated redesign while staying comfortably in the EXTRACTABLE band, I set the CI gate at the 75 threshold, not at 100. Gating at perfection turns every content experiment into a CI failure and teaches your team to ignore the gate.
FAQ
Does demoting headings hurt my regular SEO?
The headings that matter for search are the ones describing your document’s own structure, and those stay untouched. What you’re removing is markup that claimed other documents’ titles as your outline.
My organic search impressions grew over the months following the fix. Nothing in Google’s guidance requires card titles to be heading elements.
Is this just gaming one audit script?
The five checks encode how retrieval-augmented systems actually process pages: chunk by heading, embed chunks, and lift opening sentences of matching chunks. A false outline degrades that pipeline no matter whose script measures it. You’re not optimizing for my auditor. Instead, you’re fixing the DOM that every parser sees. The score is a proxy, which is exactly why Step 6 gates the band, not the number.
I use React or Vue, not Svelte. Does anything change?
Nothing structural. The bug lives in JSX and SFC templates identically (
{title}
میں Card.tsx)، مرحلہ 4 میں grep اسے تلاش کرتا ہے، role="heading" کے ساتھ aria-level کیونکہ یہ سادہ HTML ہے، یہ کسی بھی فریم ورک کے ساتھ کام کرتا ہے۔
اصل مضمون کے اندر عنوان کے بارے میں کیا خیال ہے؟
اسے اصلی رہنے دیں۔
بھتہ خوری مضمون کا عنوان مضمون کی ساخت ہے اور بالکل وہی ہے جو مردم شماری میں شامل کیا جانا چاہئے۔ Demote پیٹرن صرف مرئی اجزاء پر لاگو ہوتا ہے۔ مختلف صفحہ کے عنوانات: کارڈز، ٹیزرز، متعلقہ پوسٹس ویجیٹس، اور نیویگیشن پینلز۔
مجھے کتنی بار دوبارہ آڈٹ کیا جانا چاہئے؟
مرحلہ 6 میں، CI گیٹ تمام پیداواری تعیناتیوں کا مسلسل دوبارہ آڈٹ کرے گا تاکہ آپ کو دوبارہ کبھی دستی طور پر دوبارہ آڈٹ نہ کرنا پڑے۔
اگر آپ گیٹس کو چھوڑتے ہیں، تو ہر ماہ دو قدمی اسکرپٹ چلائیں اور لے آؤٹ کے اجزاء، نیویگیشن، یا ٹیمپلیٹس تبدیل کرنے کے بعد۔ صفحہ کے اندر مواد میں ترمیم کرنے سے شاذ و نادر ہی اسکور میں نمایاں تبدیلی آتی ہے۔ اجزاء اور ٹیمپلیٹ کو تبدیل کرنے سے مردم شماری کی شکل بدل جائے گی، اور یہ بالکل وہی تبدیلیاں ہیں جن کی دوبارہ پیمائش کوئی نہیں کرنا چاہتا۔ میں نے جو 100 سے 80 ہوم پیج ڈرافٹ بنائے ہیں وہ دوبارہ ڈیزائن سے آئے ہیں، لکھنے سے نہیں۔
اس کا سکور کم ہے لیکن کارڈ کا کوئی جزو نہیں ہے۔ اب کیا؟
پھر ایرر کلاس کو غیر ساختی طور پر لکھا جاتا ہے۔ ایک وضاحتی عنوان (صارف کی قسم کے سوال میں تبدیلی)، 40-60 الفاظ کی حد سے باہر ایک سٹارٹر (کثافت)، یا گمشدہ FAQ بلاک (ایک شامل کریں)۔ ہم مردم شماری کے دوسرے مرحلے کے ذریعے معلوم کر سکتے ہیں۔ ترمیم ایک تحریری عمل ہے، جزوی آپریشن نہیں۔
آپ نے کیا حاصل کیا ہے
ہم نے سائٹ کی خصوصیات کی پیمائش کی جو زیادہ تر مالکان نے کبھی نہیں دیکھی ہیں: عنوان کی مردم شماری اصل میں ایک جزو خارج کرتا ہے اور اس سے پیدا ہونے والا ایکسٹریکٹ ایبلٹی سکور۔
ہم نے کم سکور کے لیے ذمہ دار مخصوص جز کا سراغ لگایا، ایک ڈیموشن پیٹرن کا اطلاق کیا جس نے ایکسٹرکشن پارسر اور اسکرین ریڈر دونوں کو مطمئن کیا، اور اسکور کو خود بخود پیچھے ہٹنے سے روکنے کے لیے CI گیٹس کو منسلک کیا۔
اس سیریز کے پہلے دو گائیڈز کا وسیع تر سیاق و سباق: انجنوں میں آپ کے AI حوالہ جات کی شرح کی پیمائش آپ کو بتائے گی کہ آیا آپ کا حوالہ دیا جا رہا ہے یا نہیں، اور WebMCP کو ایجنٹ کا سامنا کرنے والی سطح فراہم کرنے کے لیے استعمال کرنا آپ کی سائٹ کو ایجنٹوں کو پڑھنے کے بجائے عمل کرنے کے لیے تیار کر دے گا۔
اس ٹیوٹوریل میں ہم لوپ کو درمیان میں بند کرتے ہیں۔ ایسا مواد بنائیں جو آپ کے پاس پہلے سے ہی اٹھانے کے قابل ہے۔ تلاش اس بات کا تعین کرتی ہے کہ آیا انجن صارف کو دیکھ سکتا ہے، اوصاف اس بات کا تعین کرتے ہیں کہ آیا انجن صارف کے نام کی وضاحت کرتا ہے، اور نکالنے کا مرحلہ، جس کا ہم نے ابھی آڈٹ کیا ہے، اس بات کا تعین کرتا ہے کہ آیا مواد اقتباس کے لیے کافی واضح ہے۔
اس ہفتے اپنے سرفہرست تین صفحات کی مردم شماری لیں۔ اگر آپ کا جزو آؤٹ لائن میں ووٹ دیتا ہے، تو اب آپ جانتے ہیں کہ ووٹ کیسے منسوخ کرنا ہے۔