The editing pass can't tell you a sentence is false A lodge operator's AI content pipeline — a writer agent with live search, an editing pass called Humanizer, and a critic agent — failed to catch three false statements in a single day, including a draft that ruled out six-day Maasai Mara safaris for everyone, according to the operator of Mara Hilltop, 2.5 km outside Sekenani Gate in Kenya. The operator reported that a second agent auditing a Search Console analysis found the first analysis covered only 826 of 1,697 clicks because Google omits rare queries, and that roughly 750 of those clicks came from people searching the lodge by name. The site's 19 June to 18 September export showed 1,697 clicks and 34,902 impressions, with the blog taking 615 clicks from 28,204 impressions, and six topics producing 600 of the blog's 615 clicks. The editing pass can't tell you a sentence is false An agent drafted an article for our lodge blog about how many days to spend in the Maasai Mara, and it had argued itself into ruling out long stays altogether: six days was too many, for anyone. The draft had already been through our whole pipeline a writer agent with live search research, an editing pass for AI habits and a critic agent , and the prose survived all three. I have photographer friends who came for six full safari days and loved every one of them. Six is still too much for most people, and the published article says so, but the flat no was wrong in a place no amount of tightening the language reaches. The same kind of sentence turned up twice more that day: once in an agent's reading of our Search Console data, and once on our own website, in the pages an AI reads before answering a guest. The lodge is Mara Hilltop https://marahilltop.com/ , 2.5 km outside Sekenani Gate in Kenya, and I run it alongside SimbaStack. Talking is faster than writing I can answer the safari-length question on WhatsApp without thinking. Turning the same answer into fifteen hundred words is a job I'll postpone for a month, so I talk instead, into Handy https://github.com/cjpais/Handy , an open-source dictation app that transcribes on my own computer. The rest of the workflow runs in the cloud. What comes out is a mess. In the duration conversation I went from the six-day photographers to taking a day off between game drives, then to the Maasai markets where people are actually trading cattle, then to the motorcycle trips through the villages into the Loita Hills. Those details change what someone books. We've had guests stay twelve days and love it, and a week or two near the Mara doesn't have to mean paying to enter the reserve every day. An agent can organise all of that, link our older posts and check the fee tables against the county's schedule. It can't know my friends stayed six days until I say so. Around the dictation sit a shared tone guide, an editing pass we call Humanizer, an SEO research skill, a publishing script for Ghost and a translation workflow for seven more languages. The tone guide exists because a SimbaStack post reached the Hacker News front page in May and the comments, friendly as they were, said the prose read as machine-written. Humanizer catches the habits, like balanced paragraphs and the tidy summary bolted onto the end. None of it can tell that a sentence is false. Nothing runs on a timer, and nothing publishes an opinion I haven't read. Three months of Search Console The chart at the top covers six months of the whole site. The numbers here come from a shorter export, 19 June to 18 September: 1,697 clicks and 34,902 impressions, with the blog taking 615 clicks from 28,204 impressions. From the first fortnight to the last, impressions went from 230 a day to 442 and clicks from 14 to 20. August beat September, though, so you can tell a growth story or a decline story depending on the fortnight you pick, and I can't separate the blog from migration season. Six topics produced 600 of the blog's 615 clicks: planning a Kenya safari without an agency, getting from Nairobi to the Mara, a Nairobi city guide, whether Nairobi is safe, sleeping inside versus outside the reserve, and a flooding update from March. Every other article, which is most of them, made seven clicks between them, and tag and author pages took the last eight. The first analysis of the queries found a cliff, 26.7% click-through in positions one to three and under 1% below that, and built a section on it about how ranking sixth is worth nothing. That section was in the first draft of this post. A second agent, checking the draft against the CSV files, found the hole: Google leaves rare queries out of the export, so it covers 826 of the 1,697 clicks, and about 750 of those came from people searching for the lodge by name, who were always going to click. Without them there's no cliff. It's the same mistake as last week's post https://blog.simbastack.com/four-round-trips-six-months/ , where the same kind of tooling divided correctly and then blamed the distance to Ireland. The comparison I trust more is one article in three languages, because the advice is identical and only the competition changes: I think it's competition. The English page is up against every tour operator selling Kenya and the Italian one against far fewer, so the same advice sits five positions higher and gets clicked twice as often. Across the blog, English pages turn 1.9% of impressions into clicks, Italian 3.7% and French 5.7%. Arabic manages 0.4%, for a reason further down. What doesn't get clicked Our Nairobi safety article averages position 8.2 and gets clicked on 1.4% of its impressions. The query "is nairobi safe" alone showed it 1,662 times for twelve clicks. When I searched it this week, an AI Overview answered the question at the top of the page. Pew found https://www.pewresearch.org/short-reads/2025/07/22/google-users-are-less-likely-to-click-on-links-when-an-ai-summary-appears-in-the-results/ that American users clicked a result on 8% of Google searches showing an AI summary, against 15% without one. "mara hilltop reviews" got 374 impressions and one click at position 7.2. Someone searching for reviews of my lodge by name has nearly decided, and we have no reviews page for Google to show them. Why "yes please" is in our Search Console Google's documentation https://support.google.com/webmasters/answer/7042828 says each follow-up question in an AI Mode conversation is logged as a new query, with its own impressions, position and clicks. So our export has rows like these: There are a few dozen of them, and the only two clicks came from people asking about public transport. What an AI would have read about the lodge The same day, we audited marahilltop.com with one question: if Google's model or ChatGPT answers a guest from our pages, what does it read? That includes llms.txt, a plain-text summary of the site written for AI crawlers, and the schema.org markup search engines read for prices and policies. The first thing we found: There's one schedule now, on every page and in all eight languages. The rest of the list: | What we found | What a guest, crawler or AI assistant got | What we changed | |---|---|---| | Room prices | The rooms page showed "$400 / night", which matches nothing our booking engine charges | Public seasonal rates on the page, in llms.txt and in the structured data, from one config file. Agent and group rates stay off the site | | Seven lodge pages in eight languages | English text under German, French and other language addresses. Search Console had flagged 46 of them as duplicates | Pointed Google at the English originals, then translated all seven pages a few hours later | | Speed | Every page rendered from scratch on every request, 0.8 to 1.6 seconds to first byte | Served from Netlify's cache, 0.12 to 0.49 seconds from a server in Germany | The speed problem was one call. Every page declared a cache lifetime, and every response still came back private, no-store , because the root layout read a request header to set the lang attribute: js // app/layout.tsx, before simplified import { headers } from "next/headers"; export default function RootLayout { children } { const path = headers .get "x-pathname" ; const lang = localeFrom path ; const dir = lang === "ar" ? "rtl" : "ltr"; return