AI Search Optimization for Jekyll: JSON-LD, llms.txt, and Entity Graphs

ruby dev.to

Most developer blogs are invisible to AI.

Not because of content quality.

Because of missing structure.


I ran into this while working with static sites (Jekyll).

Great content.

Good SEO.

Zero presence in AI answers (ChatGPT, Perplexity, Google AI Overviews).

The problem wasn’t traffic.

It was entity understanding.


Context

Static site owners wanted visibility in AI search.

But Jekyll has… nothing for that.

No tooling for:

  • structured entity graphs
  • LLM ingestion
  • AI crawler policies

So even well-written posts never showed up in AI-generated answers.


What I built

I created a Jekyll plugin:

👉 https://github.com/madmatvey/jekyll-ai-visible-content

Core idea:

Treat your site as a knowledge graph, not a collection of pages.


What it actually does

— Generates JSON-LD (Person, BlogPosting, FAQ, HowTo)

— Creates llms.txt for LLM ingestion

— Configures robots.txt for AI crawlers (GPTBot, PerplexityBot, ClaudeBot)

— Maintains consistent entity identity across pages (@id, sameAs)

— Adds semantic linking between entities

— Validates content at build time (missing metadata, inconsistencies)


The real problem I didn’t expect

Most sites fail not on content…

…but on identity consistency.

Different author names.

Missing sameAs.

No stable entity reference.

To an LLM, that’s not “a person”.

That’s noise.


Result

Published as a Ruby gem.

Already being tested by developer blogs.

And the interesting part:

Once structured correctly →

content starts becoming machine-answerable, not just searchable.


Takeaway

SEO optimized for keywords.

AI search optimizes for entities + relationships.

If your site doesn’t expose that:

You don’t exist in AI.


Save this — you’ll need it when AI becomes your main traffic source.


If you’re running a Jekyll blog, I’d love feedback:

https://github.com/madmatvey/jekyll-ai-visible-content

Read Full Tutorial open_in_new
arrow_back Back to Tutorials