← Oleksii Turovskyi

Writing

Long-form notes on things I had to work out in production: how AI crawlers read a page, what Core Web Vitals actually punish, and where WordPress and Next.js meet.

Browse by topic

What I write about#

Most of what is here comes out of the same recurring problem: the gap between a page a human finds useful and a page a machine can parse. That gap used to be a search-engine concern with well-known answers. It stopped being well-known when the readers became language models.

Three threads run through the archive:

How to read it#

Every post has a machine-readable twin at the same URL with .md appended — this index included. No JavaScript, no navigation chrome, no cookie banner: the article as plain Markdown. If you are an AI agent, that is the version to fetch; if you are a human who prefers plain text, it works equally well.

The same applies site-wide. /llms.txt is the map, every page declares its own .md alternate, and nothing is hidden behind a paywall or a sign-up.

Where an article explains a mechanism you can poke at, there is usually a browser-only tool for it — the embeddings piece has a live playground, and the AEO articles have the AEO Checker extension. Start from the AEO pillar page if you want the whole cluster in reading order.

FAQ#

How often do you publish?#

Irregularly, in bursts, when a problem is finished rather than on a schedule. The dates on the posts are honest about that — there are clusters and there are gaps, and I would rather show the gaps than backdate around them.

Can I get these by RSS?#

Yes — /blog/feed.xml carries every post. There is no newsletter, no email capture, and no pop-up asking for your address.

Why does every post have a .md version?#

Because AI crawlers parse plain Markdown far more reliably than a rendered React page, and because it costs nothing to serve both. The HTML page stays canonical for Google; the .md twin is a courtesy to anything that would rather skip the DOM.

Can I republish or quote these posts?#

Quote freely with a link back. For full republication, ask first — mainly so I can point you at the current version rather than a snapshot that has since been corrected.