Dexio / how-we-build-dexio / site
Writing search pages with agents, without writing slop
How the guides and posts on dexio.wiki get written and published. The site they publish to: astro-marketing-site. How visits and sign-ups are counted: analytics-and-consent.
It started from a public case study on r/Agentic_SEO: one person's companion site for a language-learning app, a new domain, about a hundred agent-written posts in one batch, and the author's rule that "the agents are the excavator, not the surveyor". People pick the targets and check the facts; agents do the volume. One site's self-reported results are a hypothesis, not a benchmark, so what follows is what we built, not a promise of traffic.
What it is
- A cluster map: one row per page, each with one measured search query, a kind (guide or post) and a slug. Volumes come from DataForSEO. A page with no measured query is not written.
- Four checks before a word is written (below).
- Writer agents draft in waves; a second agent fact-checks each draft against its sources.
- Guides publish when they pass. Dated posts publish one per weekday from a future date.
- Bing hears about every new or changed page within the hour through IndexNow.
- A weekly agent audit reads Search Console and rewrites what is not working.
Why it is built this way
- Volume is cheap; facts are not. The checks and the second agent are what make the volume worth publishing.
- Bing matters early. The case study's author traced his early AI-assistant traffic to Bing, whose index ChatGPT and Copilot search use, while Google still held the new domain back. One site's account, but IndexNow costs nothing.
- No artificial delay for guides. Google's John Mueller has said publishing in bulk is not treated as spam ("why would you artificially delay it?"), and on a new domain the indexing clock is the bottleneck. Posts carry dates, so they stay one per weekday for how the blog reads to a person.
How to build it
-
Build the cluster map from measured demand. Pull volumes for the terms your product can honestly answer, group them by search intent, and give each page exactly one target query.
-
Run four checks per page before writing:
- Inventory: does an existing page already target this query or a close variant? Then
strengthen that page instead. A script that lists every page with its title and
queryanswers this in a second. - SERP: read the top ten for the query. Match the kind of page that wins (how-to, list, comparison) and beat it on what it leaves out. At DataForSEO's price list, a live Google SERP is $0.002 a request.
- Something only you can say: a step you ran yourself, your own numbers, a rival fact checked at its source. If there is nothing, drop the page.
- Links: three or more existing pages to link to, and one or two that should link to the new page, edited in the same commit.
- Inventory: does an existing page already target this query or a close variant? Then
strengthen that page instead. A script that lists every page with its title and
-
Give writers a rules file and the frontmatter they must fill:
title(60 characters or fewer, query near the front),description(155 or fewer),query,sourcesfor every outside fact, acategorythe build requires, and the publish date. Plain sentences, numbers before adjectives, and nothing the live product does not do. -
Fact-check each draft with a fresh agent that gets only the draft, its sources and the product's own docs: every claim supported, every link resolves, frontmatter limits met.
-
Publish on a schedule without holding a branch open. Merge every page with its date; the build leaves out anything dated in the future, and a link to a page that is not live yet renders as plain text until its day:
DEXIO_NOW=2026-10-27 npm run build # preview the site as it will be on that dayA daily job builds and deploys when a page comes due and checks its URL answers 200.
-
Tell Bing through IndexNow. Serve a key file at
/<key>.txt, then hourly: read the live sitemap, hash each page with build-specific asset names stripped, and POST the URLs whose hash changed tohttps://api.indexnow.org/indexnowwith your host and key. No account is needed, and Bing shares the URLs with the other IndexNow engines. -
Audit weekly with the Search Console API: totals against the week before, pages with many impressions and few clicks (rewrite the title and description to answer the queries they actually get), pages crawled but not indexed (add links to them), and queries on page two that no page targets well (the next batch). Request
dataState: allto see Google's preliminary data, about two days ahead of the Search Console screens. Leave a page an audit changed alone for 28 days, so the new title gets judged.
Verify
- A build with
DEXIO_NOWset to the last date shows every scheduled page and no link left as plain text. - IndexNow answers 200 or 202 to each submission.
- URL Inspection in Search Console on a new page: crawled and indexed, as mobile, with the canonical you set.
Pitfalls we hit
- Two addresses for one page.
/xand/x/both answered 200 and Search Console split each page's impressions between them. Pick one form, 301 the other, and use it in every link. - The stagger we first copied from the case study had no test behind it. Check why a rule exists before you copy it.
- Search Console's screens leave out preliminary data; the API returns it if asked, so the audit and the screens can disagree by a couple of days.