flutter_easy_seo 1.2.1
flutter_easy_seo: ^1.2.1 copied to clipboard
Generate real SEO HTML, JSON-LD, sitemaps & llms.txt for search engine & AI bots: Automated via headless WidgetTester, interactive mode, async data & dynamic routes support.
1.2.1 #
New Wrappers/Extensions #
- New
easySeoSpan(SEOTextType.span) on theWidget,TextandStringextensions — emits<span>text</span>, with the text auto-extracted from the wrappedText/RichTextchild or set explicitly viatext:. - New
SEOAddressmodel,EasySEOAddressWrapper/easySeoAddress— semantic<address>element with a fixed organization JSON-LD structure (@type: ProfessionalService,@id: https://lxr.at/#organization). The single parameters (name,founder,streetAddress,addressLocality,postalCode,addressRegion,addressCountry,email,telephone,sameAs) are the source of truth for both the JSON-LD script and the derived microdata (e.g. a nestedPostalAddress).
1.2.0 #
Persistent Hidden Widgets #
- Persistent hidden content: unmounted wrapper subtrees (e.g. hidden
TabBarView/PageViewtabs) are now frozen per page and re-injected into their wrapping section on every generation, so hidden tabs keep contributing headings, text, links and structured data to the SEO output. - New
EasySEOBaseWrapper.id— stable identity for re-mount matching (aKeyworks too); without it, wrappers are matched by tree position and content hash. - New
EasySEOBaseWrapper.persistHiddenandEasySEOScopewidget — control whether a wrapper's subtree persists after unmounting (wrapper → nearest scope → defaulttrue).
Lists and JSON-LD #
- Structured data quality: JSON-LD list items (
ListItem) and lists (ItemList) now carry meaningfulnamevalues — the list item's text and the surrounding heading of the list, respectively. Heading names are resolved regardless of nesting depth (through intermediary wrappers such as<div>/<section>), and a user-authorednamealways wins. - New
generateJsonLdoption onEasySEOListWrapper/easySeoList(defaultfalse): lists render plain<ul>/<li>HTML withoutItemList/ListItemJSON-LD unless enabled. Only affects that list —<nav>breadcrumbs and navigation still emit JSON-LD. - Structural wrapper lists (lists whose only content is nested lists) are suppressed from JSON-LD output, so only content-bearing lists are emitted.
itemListElement,imageandadditionalPropertyare always emitted as arrays, even for single-item lists.
<head> tags #
- New
EasySEOPage.headTagsBuildercallback for building page-level head tags. It is invoked at HTML generation time (not widget-tree build), so it can resolve translated texts (e.g. from a locale provider) without triggering a rebuild of the whole widget tree — useful when the statictitle/descriptionparams don't fit translated content.
Bug Fixes #
positionand other list metadata are emitted in JSON-LD only — no longer leaked into the visible HTML (no<span class="position">/microdata).- URL output fixes: fragment (
#) and query strings (?,&,=) are no longer percent-encoded in canonical/alternate URLs, resolved relative links and JSON-LD URLs. - Heading order preserved by default: the automatic h1–h6 reordering is now disabled (
EasySEOPage.sortHeadingsByPriority, defaultfalse). Sibling wrappers keep the order they are declared in, so interleaved structures likeh4, p, h4, pare no longer regrouped. Footers still sort last. SetsortHeadingsByPriority: trueto restore the old behavior. - Additional
childrendeclared on a wrapper (e.g.easySeoHtml(children: ...)) are now emitted before the content produced by nested wrappers, in declaration order. Previously headings were hoisted first and non-heading children were emitted after the nested content.
1.1.0 #
- License: Relicensed to Apache 2.0.
- Infrastructure: Paid turnkey server stacks are now decoupled from the package and managed via Polar.
- Updated Readme.md.
1.0.8 #
- Automatic
llms.txt/llms-full.txtgeneration for AI crawlers and LLM clients (index + full page Markdown dumps, same route set as the sitemap). - New
siteName/siteDescriptionconfiguration options for the llms.txt header (with automatic root-page fallback). - Interactive Mode: new "Generate LLMs" button and llms.txt / llms-full.txt download support.
- Changes to example project: Generate
llms.txt/llms-full.txtin seo_generation_test.dart, Link to project, fix breadcrumb bug. - Updated Readme.md.
1.0.7 #
- Update pub.dev package topics and README metadata
1.0.6 #
- Moved convenience test mocks and utils and sync client to dedicated package flutter_easy_seo_sync.
- Code cleanup.
1.0.5 #
- Moved convenience test mocks and utils to example project. This is a temporary solution to convince pub.dev that this package is suitable for web.
- Removed unused imports and packages.
1.0.4 #
- revert last change
1.0.3 #
- moved test utils to sub package
1.0.2 #
- specify platforms
- fix some warnings
1.0.1 #
- refactor to make some public elements private
- code doc comments
1.0.0 #
- Complete SEO-friendly HTML documents from the live widget tree
- Automatic
sitemap.xmlgeneration - SEO-relevant
<head>tags and metadata (Twitter, Open Graph, custom meta tags) - Interactive Mode with UI overlay for debugging and manual generation
- Automated Mode via Flutter Widget Tester for CI and scheduled generation
- JSON-LD structured data and Microdata support
