They already send X-Robots-Tag: noindex, which keeps them out of search results while staying readable by AI agents. A robots.txt Disallow blocks fetching entirely (so the noindex is never seen) and blocks agents from llms.txt, defeating its purpose.
Add ai-train=yes, search=yes, ai-input=yes to the blazor.radzen.com
robots.txt generator so the site explicitly signals AI content usage
preferences, matching the agent-friendly posture across Link headers,
llms.txt, markdown twins, and the MCP server card.
Run the existing Razor-to-markdown pipeline on Index.razor so the
homepage markdown twin mirrors what the page actually renders, instead
of reusing the llms.txt site index.
Extend ExtractRadzenTextContent to cover the patterns the homepage
uses:
* Recognise TagName.H1..H6 (preferred) and TextStyle.DisplayH1..H6
as headings, not just TextStyle.H2..H6.
* Read the Text="..." attribute when the tag body is empty, so
self-closing RadzenText elements (subscription cards, testimonials)
contribute content.
* Track self-closing tags in the depth loop so the extractor exits
cleanly on <RadzenText .../> lines.
* Replace the naive @expression strip with a balanced-parens variant
that no longer leaves format-string fragments like "MMM dd, yyyy").
The root URL / had no markdown twin, so the content negotiation
middleware fell back to HTML for Accept: text/markdown. Mirror llms.txt
into md/index.md so agents requesting the homepage get the same
structured site overview.
Rewrite the llms.txt preamble to highlight key differentiators (Material 3/2/Fluent/Bootstrap themes, companion IDE, MCP server) instead of the generic description. Update the AI page with a keyword-rich title, meta description, and H1.
Generate sitemap.xml and robots.txt at build time via RadzenBlazorDemos.Tools
instead of serving them dynamically through SitemapController and Razor pages.
Uses git log to embed accurate per-page last-modified dates.
Add social proof, quick-start snippet, component inventory, and Pro subscription info to README. Update llms.txt generator with matching intro, setup instructions, and pricing link.
Extract parameter/event types from component source via Roslyn syntax
parsing, resolve inherited properties across the class hierarchy, and
generate per-component API reference files at api/{component}.md with
typed Parameters, Events, and Methods tables. Component pages now link
to the separate API file instead of inlining the tables.
Parse Tags from ExampleService.cs via Roslyn (handling new[], string[],
and C#12 collection expressions) and emit an inline Keywords line in each
generated .md page. The keywords are placed after the description so they
land in the first chunk during heading-based splitting, directly enriching
embedding vectors for improved RAG retrieval.
Rewrite the RadzenBlazorDemos.Tools to produce a spec-compliant llms.txt
index with semantic grouping (parsed from ExampleService.cs via Roslyn) and
individual .md files per component page enriched with API reference tables
extracted from Radzen.Blazor XML documentation. Primary component pages
include full parameter/event tables; sub-feature pages link back to the
primary page's API reference.
Add a MapGet endpoint in the Host to serve .md files at their corresponding
URLs (e.g. /accordion.md). Update the Dockerfile to restore the Tools
project dependencies for proper Docker builds.
- Add \b word boundary to directive regex so @page no longer matches
@pageSizeOptions, @pageIndex etc., which was stripping attribute values
and leaving broken Razor markup in the output.
- Stop stripping @code blocks from example files — they contain the C#
code (methods, fields, event handlers) needed to understand examples.
- Exclude AccessibilityPage, GetStarted, and ThemeServicePage from
generation (generic setup/WCAG content, not component documentation).
- Skip "Keyboard Navigation" sections (shortcuts rendered from C# data
that the generator cannot extract, leaving empty placeholders).
- Skip "Radzen Blazor Studio" sections (IDE-specific, not component API).
Sub-component .razor files without @page directives were getting
standalone sections with rendered placeholder text instead of being
embedded as code snippets via <RadzenExample> in their parent pages.
* RadzenBlazorDemos.Tools added
* GenerateLlmsTxt Condition update to Release
* GenerateLlmsTxt updated again
* code fixed
* content generation cleaned
* razor/html tags removed from example descriptions and the code is now inside codeblock
* more fixes