প্রকল্প সম্পর্কে
esen_seo একটি Flutter প্যাকেজ যা Flutter Web-এর একটি কাঠামোগত সমস্যা সমাধান করে: একটি Flutter অ্যাপ উইজেট ট্রি রেন্ডার করে, ডকুমেন্ট নয়, তাই ক্রলাররা পড়ার জন্য কোনো হেডিং, প্যারাগ্রাফ বা লিংক পায় না। প্যাকেজটি সেই উইজেট ট্রিকে সরাসরি DOM-এ সেমান্টিক HTML হিসেবে মিরর করে, মেটা ট্যাগ, OpenGraph এবং Schema.org JSON-LD পরিচালনা করে, এবং একটি shelf-ভিত্তিক সার্ভার-সাইড রেন্ডারিং উপাদান অন্তর্ভুক্ত করে যা বটদের পেজ সোর্সে একটি সম্পূর্ণ HTML ডকুমেন্ট দেয়। এটি সম্পূর্ণ Dart এবং Puppeteer বা headless Chrome ব্যবহার করে না।
ব্যবহারটি পুনর্লিখনের পরিবর্তে ক্রমবর্ধমান: বেশিরভাগ উইজেট স্বয়ংক্রিয়ভাবে মিরর হয়, `.seo()` এক্সটেনশন কল সেমান্টিক অর্থ যোগ করে, এবং একটি লাইব্রেরি উইজেট সেট মিরর যা দেখতে পারে না তা কভার করে (বন্ধ ড্রপডাউন, ভার্চুয়ালাইজড লিস্ট, নিষ্ক্রিয় ট্যাব, আঁকা চার্ট)। iOS, Android এবং ডেস্কটপে প্রতিটি কল একটি নো-অপ এবং উইজেট আগের মতো রেন্ডার হয়; 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 TextSpan এবং নেস্টেড strong, em, code এবং নিরাপদ a এলিমেন্ট তৈরি করে।
- প্রতিটি পেজের জন্য একটি একক EsenSeo.setMeta() কলের মাধ্যমে মেটা ট্যাগ, OpenGraph এবং Twitter Cards, সাথে ফলব্যাক যেমন og:title থেকে title।
- Article, Product (AggregateRating সহ), Review, Event, LocalBusiness, Organization, WebSite, BreadcrumbList এবং FAQPage-এর জন্য Schema.org JSON-LD বিল্ডার, সাথে একটি জেনেরিক এস্কেপ হ্যাচ।
- একটি বট-সচেতন SSR সার্ভার: shelf মিডলওয়্যার User-Agent দ্বারা ক্রলার সনাক্ত করে এবং একটি বাস্তব HTML ডকুমেন্ট পরিবেশন করে, `dart run` দিয়ে চালানো যায়।
- URL রাউটিং একটি একক সত্যের উৎস হিসেবে: একটি pure-Dart রুট টেবিল নেভিগেশনে অ্যাপ মেটা ট্যাগ এবং বটদের জন্য সার্ভার-রেন্ডারড রুট বডি চালায়, এবং sitemap.xml (lastmod এবং hreflang বিকল্প সহ), robots.txt, ক্যানোনিকাল URL এবং বাস্তব HTTP 404 তৈরি করে।
- CDN হোস্টিংয়ের জন্য ওয়েব বিল্ডে রুট টেবিলের স্ট্যাটিক প্রিরেন্ডারিং স্ট্যাটিক HTML ফাইল হিসেবে, সার্ভার ছাড়া।
- ঐচ্ছিক দৃশ্যমান শেল, যেখানে প্রিরেন্ডারড HTML Flutter ইঞ্জিন লোড হওয়ার আগে প্রথম ফ্রেম।
- অপ্ট-ইন DOM-ফার্স্ট রুট যা Flutter Web লোড না করেই স্থায়ী পেজ হিসেবে একটি বিশুদ্ধ রুট বডি রাখতে পারে, SeoTabs, SeoCarousel এবং সীমিত SeoCollection ইন্টারঅ্যাকশন একই pure Dart সোর্স থেকে কম্পাইল করা।
- রুট টেবিল থেকে llms.txt এবং llms-full.txt তৈরি, সাথে দ্রুত ইনডেক্সিংয়ের জন্য IndexNow পিং।
নিরাপত্তা নীতি স্পষ্ট: ট্যাগ একটি অনুমোদিত তালিকা, তাই script, style, iframe, form, plaintext, svg, head-শুধু ট্যাগ, কাস্টম এলিমেন্ট এবং অবৈধ নাম রেন্ডার সময়ে প্রত্যাখ্যান করা হয় এবং span/div-এ ফিরে যায় (SeoMode.strict-এ ডিবাগ সতর্কতা সহ)। অ্যাট্রিবিউট হ্যান্ডলিং ইভেন্ট হ্যান্ডলার এবং অবৈধ নাম বাদ দেয়, তবে data-*, aria-*, id, lang এবং cite অনুমতি দেয়; URL অ্যাট্রিবিউট আপেক্ষিক URL এবং http, https, mailto, tel, sms এবং ftp-তে সীমাবদ্ধ, javascript: এবং অনুরূপ স্কিম ব্লক করে।
README SEO উইজেট লাইব্রেরিও নথিভুক্ত করে: SeoBarChart, SeoPieChart (pure-CSS conic-gradient পাই এবং একটি টেবিল), SeoRating, SeoDataTable, SeoFaq (details/summary অ্যাকর্ডিয়ন), SeoBreadcrumbs, SeoFigure, SeoResponsiveImage (picture/srcset AVIF/WebP সোর্স সহ), SeoTestimonial এবং SeoRichText। পাঁচটি উইজেট কন্টেন্ট সম্বোধন করে যা Flutter কখনও তৈরি করে না: SeoNavMenu (ড্রপডাউন এন্ট্রি ডেটা হিসেবে), SeoListView (লেজি রেন্ডারিং সত্ত্বেও সমস্ত আইটেম মিরর), SeoCarousel, SeoTabs এবং SeoStepper। অ-ওয়েব প্ল্যাটফর্মে সব নো-অপ এবং সাধারণ Flutter উইজেট রেন্ডার করে।
রাউটিং একটি pure-Dart ফাইলে একবার সংজ্ঞায়িত হয় Flutter ইমপোর্ট ছাড়া, main.dart এবং সার্ভার দ্বারা ভাগ করা। SeoRoute.dynamic একটি একক ডেটাবেস রিড থেকে মেটাডেটা এবং বডি সমাধান করে, sitemap, llms.txt এবং প্রিরেন্ডারের জন্য enumeratePaths সহ। একটি SeoRouteObserver নেভিগেশন অনুসরণ করে মিরর এবং মেটা ট্যাগ রাখে, এবং go_router, beamer, auto_route বা অন্যান্য Router-ভিত্তিক প্যাকেজের সাথে কাজ করে। README নোট করে যে লাইভ DOM মিরর উইজেট ট্রি থেকে উদ্ভূত এবং একটি দ্বিতীয় লেখা কন্টেন্ট ট্রি প্রয়োজন হয় না, যখন সার্ভার-রেন্ডারড রুট বডি আলাদা হয়, যদি না উভয় একটি ভাগ করা pure ডেটা মডেল থেকে উদ্ভূত হয়; বিচ্যুতি ধরতে auditSeoParity প্রদান করা হয়।
README বলে যে মিরর ডিফল্টভাবে লুকানো (aria-hidden, শূন্য আকার) এবং স্পষ্টভাবে একটি অ্যাক্সেসিবিলিটি বৈশিষ্ট্য নয়, কারণ Flutter নিজস্ব সেমান্টিক্স ট্রি প্রকাশ করে।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.