How We Built a Dynamic Blog with Astro and RequestDesk (And Why Your Schema Markup Shouldn't Be an Afterthought)
Technology AEO

How We Built a Dynamic Blog with Astro and RequestDesk (And Why Your Schema Markup Shouldn't Be an Afterthought)

Brent Peterson | 4 min read

Most static site generators treat structured data as an afterthought. You either hardcode it into templates or bolt on a plugin that generates basic schema. Neither approach scales well when your content lives in a CMS.

We had a different problem to solve. Our blog content lives in RequestDesk. Our marketing site runs on Astro. We needed the two to talk to each other in a way that gave us full control over the structured data output.

The Setup

Our architecture is straightforward:

  1. RequestDesk stores blog posts (title, content, excerpt, categories, tags, publish date, word count)
  2. Astro runs in hybrid mode with SSR enabled for the blog routes
  3. When someone visits /blog/post-slug, Astro fetches the post from our API and renders it server-side
  4. The JSON-LD schema is generated dynamically from the post data

This means every blog post gets fresh, accurate structured data without us touching a template every time we publish.

What the Schema Includes

We built a BlogStructuredData component that generates a full @graph structure:

  • WebSite - Site context and publisher info
  • Organization - Company details, logo, social profiles
  • WebPage - The page itself with breadcrumb references
  • ImageObject - Featured image with proper attribution
  • BreadcrumbList - Navigation path (Home > Blog > Post Title)
  • Article/BlogPosting - The actual content with all the metadata

Each entity links to the others through @id references. Google and LLMs can traverse the graph to understand relationships.

Why This Matters for AEO

Search is changing. Google still matters, but AI assistants (ChatGPT, Perplexity, Claude) are increasingly how people find information. They consume structured data differently than traditional crawlers.

When an AI assistant encounters a page with comprehensive JSON-LD, it can:

  • Extract facts with confidence (publish date, author, reading time)
  • Understand content hierarchy (what's the main topic, what are subsections)
  • Cite sources accurately (proper URLs, attribution)
  • Surface content in conversational responses

Our schema includes wordCount, timeRequired (reading time in ISO 8601 format), keywords, and articleSection. These aren't required for Google rich snippets, but they help AI systems understand the content better.

The Technical Details

For anyone building something similar, here's what we learned:

Dates need timezones. Google's Rich Results Test will flag 2026-01-24T17:18:50 as missing timezone info. Append Z for UTC or include the offset. We wrote a helper function that checks if the date already has timezone info before appending.

Use @graph structure. Instead of a flat BlogPosting object, wrap everything in a @graph array. This lets you define entities once and reference them by @id elsewhere. Cleaner, more maintainable, better for complex pages.

SSR is worth it for blogs. We could have built this as a static site with pre-rendered pages, but SSR means our schema is always current. Edit a post in RequestDesk, the live page reflects it immediately. No rebuild required.

Component-based schema generation. Our BlogStructuredData.astro component takes a post object and page URL as props. All the schema logic lives in one place. When Google changes their requirements (and they will), we update one file.

What We Skipped

We could have added more schema types:

  • FAQPage for posts with Q&A sections
  • HowTo for tutorial posts
  • Review for product content

We built the foundation to support these. The component already handles optional FAQ data if present on the post. But we're not forcing schema types where they don't belong. A thought leadership piece doesn't need HowTo markup just because we can add it.

The Result

After deploying, we ran the post through Google's Rich Results Test:

  • Article schema: Valid
  • Breadcrumb schema: Valid
  • Zero errors, zero warnings

The blog is now eligible for rich snippets and properly structured for AI discovery. Every new post gets the same treatment automatically.

Try It Yourself

View source on any post at requestdesk.ai/blog and search for application/ld+json. You'll see the full graph structure.

If you're building content systems and want this level of control over your structured data, that's exactly what RequestDesk is for. Your content, your schema, your rules.

Tags

astro json-ld schema seo aeo technical architecture