منصوبے کے بارے میں

esen_seo ایک Flutter پیکیج ہے جو Flutter Web کے ایک ساختی مسئلے کو حل کرتا ہے: ایک Flutter ایپ ویجٹ ٹری رینڈر کرتی ہے نہ کہ دستاویز، اس لیے کرالرز کو پڑھنے کے لیے کوئی سرخیاں، پیراگراف یا لنکس نہیں ملتے۔ یہ پیکیج اس ویجٹ ٹری کو براہ راست DOM میں سیمنٹک HTML کے طور پر پیش کرتا ہے، میٹا ٹیگز، OpenGraph اور Schema.org JSON-LD کا انتظام کرتا ہے، اور ایک shelf پر مبنی سرور سائیڈ رینڈرنگ جزو شامل کرتا ہے جو بوٹس کو صفحے کے سورس میں مکمل HTML دستاویز فراہم کرتا ہے۔ یہ خالص Dart ہے اور Puppeteer یا headless Chrome استعمال نہیں کرتا۔ استعمال دوبارہ لکھنے کے بجائے بتدریج ہے: زیادہ تر ویجٹس خودکار طور پر پیش کیے جاتے ہیں، `.seo()` ایکسٹینشن کالز سیمنٹک معنی شامل کرتی ہیں، اور لائبریری ویجٹس کا ایک مجموعہ ان کیسز کا احاطہ کرتا ہے جو آئینہ نہیں دیکھ سکتا (بند ڈراپ ڈاؤن، ورچوئلائزڈ لسٹس، غیر فعال ٹیبز، پینٹ کیے گئے چارٹس)۔ iOS، Android اور ڈیسک ٹاپ پر ہر کال no-op ہے اور ویجٹس پہلے کی طرح رینڈر ہوتے ہیں؛ HTML صرف ویب پر موجود ہوتا ہے۔ README میں بیان کردہ کلیدی صلاحیتیں: - Text، Image، Column، Row اور GestureDetector کے لیے `.seo()` ایکسٹینشنز، ٹائپڈ ٹیگ کنسٹنٹس (SeoTextTag.h1، SeoContainerTag.section) اور شارٹ ہینڈز جیسے .h1–.h6، .p، .li، .ul، .section، .article، .nav، .tr۔ - سمارٹ ڈیفالٹس: بغیر کسی .seo() کال کے صفحات بھی رینڈر ہوتے ہیں، پہلا متن h1 کے طور پر، بعد کے متون p کے طور پر، اور تصاویر img کے طور پر semanticLabel کو alt کے طور پر استعمال کرتے ہوئے۔ بلاک یا غلط ٹیگز محفوظ عناصر پر واپس آ جاتے ہیں۔ - `.seoNodes()` کے ذریعے حسب ضرورت ترجمے، جس سے کوئی بھی ویجٹ اپنا HTML قرار دے سکتا ہے؛ SEO ویجٹ لائبریری پینٹ شدہ مواد کا ترجمہ کرتی ہے (مثال کے طور پر SeoBarChart CSS بارز کے ساتھ ساتھ اپنے ڈیٹا کی حقیقی ٹیبل کے طور پر پیش ہوتا ہے)۔ - SeoRichText ایک ڈیکلریٹو اسپین ٹری سے نیٹو Flutter TextSpans اور نیسٹڈ strong، em، code اور محفوظ a عناصر بناتا ہے۔ - ہر صفحے کے لیے ایک EsenSeo.setMeta() کال کے ذریعے میٹا ٹیگز، OpenGraph اور Twitter Cards، فال بیکس کے ساتھ جیسے title سے og:title۔ - Article، Product (بشمول AggregateRating)، Review، Event، LocalBusiness، Organization، WebSite، BreadcrumbList اور FAQPage کے لیے Schema.org JSON-LD بلڈرز، نیز ایک عمومی escape hatch۔ - بوٹ سے آگاہ SSR سرور: shelf مڈل ویئر User-Agent کے ذریعے کرالرز کا پتہ لگاتا ہے اور حقیقی HTML دستاویز پیش کرتا ہے، جو `dart run` سے چلائی جا سکتی ہے۔ - URL روٹنگ بطور واحد ذریعہ حقیقت: ایک خالص Dart روٹ ٹیبل نیویگیشن پر ایپ میٹا ٹیگز اور بوٹس کے لیے سرور رینڈرڈ روٹ باڈیز چلاتی ہے، اور sitemap.xml (lastmod اور hreflang alternates کے ساتھ)، robots.txt، canonical URLs اور حقیقی HTTP 404s بناتی ہے۔ - روٹ ٹیبل کی جامد prerendering ویب بلڈ میں جامد HTML فائلوں کے طور پر بغیر سرور CDN ہوسٹنگ کے لیے۔ - اختیاری مرئی شیل، جہاں prerendered HTML Flutter انجن لوڈ ہونے سے پہلے پہلا فریم ہوتا ہے۔ - Opt-in DOM-first روٹس جو Flutter Web لوڈ کیے بغیر خالص روٹ باڈی کو مستقل صفحہ کے طور پر رکھ سکتے ہیں، SeoTabs، SeoCarousel اور محدود SeoCollection تعاملات کے ساتھ جو اسی خالص Dart سورس سے کمپائل ہوتے ہیں۔ - روٹ ٹیبل سے تیار کردہ llms.txt اور llms-full.txt، نیز تیز انڈیکسنگ کے لیے IndexNow pings۔ حفاظتی پالیسیاں واضح ہیں: ٹیگز ایک allow list ہیں، اس لیے script، style، iframe، form، plaintext، svg، head-only ٹیگز، کسٹم عناصر اور غلط نام رینڈر کے وقت مسترد ہو جاتے ہیں اور span/div پر واپس آ جاتے ہیں (SeoMode.strict میں ڈیبگ وارننگ کے ساتھ)۔ ایٹریبیوٹ ہینڈلنگ ایونٹ ہینڈلرز اور غلط ناموں کو خارج کرتی ہے جبکہ data-*، aria-*، id، lang اور cite کی اجازت دیتی ہے؛ URL ایٹریبیوٹس رشتہ دار URLs کے علاوہ http، https، mailto، tel، sms اور ftp تک محدود ہیں، javascript: اور اسی طرح کی اسکیمز کو بلاک کرتے ہوئے۔ README SEO ویجٹ لائبریری کی بھی دستاویز کرتا ہے: SeoBarChart، SeoPieChart (خالص CSS conic-gradient پائی کے ساتھ ٹیبل)، SeoRating، SeoDataTable، SeoFaq (details/summary ایکارڈین)، SeoBreadcrumbs، SeoFigure، SeoResponsiveImage (AVIF/WebP سورسز کے ساتھ picture/srcset)، SeoTestimonial اور SeoRichText۔ پانچ ویجٹس ایسے مواد کو حل کرتے ہیں جو Flutter کبھی نہیں بناتا: SeoNavMenu (ڈراپ ڈاؤن اندراجات بطور ڈیٹا)، SeoListView (سست رینڈرنگ کے باوجود تمام آئٹمز پیش)، SeoCarousel، SeoTabs اور SeoStepper۔ غیر ویب پلیٹ فارمز پر یہ سب no-ops ہیں جو سادہ Flutter ویجٹس رینڈر کرتے ہیں۔ روٹنگ ایک بار خالص Dart فائل میں بغیر Flutter امپورٹس کے بیان کی جاتی ہے، جو main.dart اور سرور کے ذریعے مشترکہ ہے۔ SeoRoute.dynamic ایک ہی ڈیٹا بیس ریڈ سے میٹا ڈیٹا اور باڈی حل کرتا ہے، sitemap، llms.txt اور prerender کے لیے enumeratePaths کے ساتھ۔ ایک SeoRouteObserver آئینے اور میٹا ٹیگز کو نیویگیشن کے ساتھ رکھتا ہے، اور go_router، beamer، auto_route یا دیگر Router-based پیکیجز کے ساتھ کام کرتا ہے۔ README نوٹ کرتا ہے کہ لائیو DOM آئینہ ویجٹ ٹری سے ماخوذ ہے اور اسے دوسرے تحریری مواد کے درخت کی ضرورت نہیں، جبکہ سرور رینڈرڈ روٹ باڈیز الگ ہیں جب تک کہ دونوں مشترکہ خالص ڈیٹا ماڈل سے ماخوذ نہ ہوں؛ auditSeoParity انحراف کو پکڑنے کے لیے فراہم کیا گیا ہے۔ README بیان کرتا ہے کہ آئینہ بطور ڈیفالٹ چھپا ہوا ہے (aria-hidden، صفر سائز) اور واضح طور پر accessibility کی خصوصیت نہیں، کیونکہ Flutter اپنا سیمنٹکس ٹری شائع کرتا ہے۔