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:imagebanner is a PNG I drew once as an SVG and rasterized at design time — aurora gradient, dashed flight path, the name. Theog:andtwitter:cardtags 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-colorfor 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.