There’s a persistent idea that being findable on the web requires a JavaScript framework, an SEO plugin, or both. This site has no JavaScript at all — and everything a crawler, feed reader, or link preview needs is here. This post documents the actual stack, because it’s simpler than you’d expect and it all ships as static files.

The principle: crawlers read HTML. Every discoverability feature below is just markup or a plain file, generated once at build time by Jekyll when I push to the repository. Nothing is computed on your visit, and nothing can break at runtime — the code that produces these tags doesn’t run in your browser; it ran on GitHub’s build server.

The pieces:

  • Semantic HTML first. One <h1> per page, headings in order, real text content, landmarks with labels. This is the part that actually matters most, and no tool can generate it for you after the fact.
  • Per-page titles, meta descriptions, and canonical URLs. Each page carries its own <meta name="description"> and <link rel="canonical">, produced from the same front matter and data file that render the visible page — so the preview text can’t drift from the content.
  • Social preview cards from a static image. The og:image banner is a PNG I drew once as an SVG and rasterized at design time — aurora gradient, dashed flight path, the name. The og: and twitter:card tags point at that committed file. Link previews work on every platform with zero runtime work.
  • Structured data generated by Liquid. The homepage embeds a Person JSON-LD block built from _data/site.yml — the same file that renders the visible homepage. Machine-readable and human-readable facts come from one source, so they can’t disagree. This is also the only <script> tag on the entire site: a data block, never executed.
  • A sitemap and an Atom feed. Two whitelisted plugins (jekyll-sitemap, jekyll-feed) emit both on every build, and the feed carries a proper author element. Feed readers and search engines get the full URL list without crawling.
  • Small things machines read: theme-color for both color schemes, color-scheme, an apple-touch-icon. Minutes of work, permanent polish.

The performance angle comes free. The entire stylesheet is ~19 KB (under 5 KB gzipped), fonts are the system stack, and there is no JavaScript to parse or execute. Pages are a single HTML file plus one small stylesheet — which is also what page-experience measurements look at.

What this deliberately doesn’t include: analytics, tracking, A/B tooling, or any third-party runtime script. I can’t tell you this stack “boosted traffic by X%” because nothing is measured — the honest claim is narrower: every standard machine-readable surface a static site can offer is present, correct, and verifiable in the page source.

The whole stack is inspectable in the open repo — _layouts/default.html builds the head, _data/site.yml holds the facts. If you’re weighing a static rebuild of your own site, this is your permission slip: the boring version is the complete version.