The Katman method: research, plan, build, verify
The Katman method gets a site recommended by AI assistants in four steps: research what customers ask, plan one page per customer situation, have your AI coding tool build it with 15 prompts that each carry an acceptance criterion, then verify with commands and a fixed question set every 14 days. It comes from our own sites, including one that got 333 visitors from ChatGPT in its first 7 days (own measurement, 21–27 September 2026).
Three gates, four steps
An AI coding tool does exactly what you ask. If it doesn’t know what to ask for, “fix the SEO” gets you one meta tag. The method gives it a sequence and a pass-or-fail check at every step. The rule from our book: never tell your coding tool to “improve rankings”. Give it a measurable job (“a unique title on every page”) and an acceptance criterion (“no two pages share a title”).
The three gates
| Gate | The question | What usually closes it |
|---|---|---|
| Read | Can bots reach the page and see the text? | robots.txt, CDN or firewall rules, text drawn only by JavaScript, soft 404s |
| Quote | Is there a sentence worth lifting? | A vague first paragraph; a different description of the brand on every page |
| Fit | Is there a page for the customer’s situation? | Only a home page and pages named after the product |
Two layers sit outside the page: mention (what others say about you) and measure (whether any of it shows up in answers). The background is on What is GEO?.
The four steps
| Step | Output |
|---|---|
| 1. Research | research.md: customer situations, your one sentence, the not-X note, competitors, proof, keywords, question set |
| 2. Plan | A page plan: which pages, at which URLs, with which blocks |
| 3. Build | The live site, built with prompts P0–P14 in order |
| 4. Verify | A measurement table: notifications sent, checks run, questions re-asked 14 days later |
Step 1: Research
The most common vibe-coder mistake is naming pages after the product. Customers don’t search for your product; they describe their situation.
The research file
- 10–12 situation sentences, without your brand, as a customer would type them into ChatGPT. Take them from sales calls, support emails and reviews.
- What assistants say today. Ask each question logged out with web search on, and write down who is named and which pages are cited. That is your competitor list and your source list.
- What people type into Google: autocomplete, “People also ask”, Bing Webmaster Tools keyword research, Search Console queries. Name URLs with those words: katman.pro’s Turkish consulting page became
/tr/geo-danismanligibecause Turkish buyers write it that way. - Competitors only from their own pages, with a check date; proof only if it can be verified, with source and date.
In Katman, katman_research writes this file to .katman/research.md and flags every [FILL] it can’t answer from your code.
Your one sentence and the not-X note
Write one sentence in four parts: what the customer brings, what you do, what they get, which fear is unnecessary. An invented example: “Upload your invoice. We move the line items into your accounting software in 30 seconds and flag the ones that don’t match. Your document is never stored.” Our sample site’s real sentence had the same structure, and ChatGPT repeated all four parts in two sessions on 28 September 2026 (own measurement).
Then ask ChatGPT “What is [your brand]?”. On 22 September 2026, Perplexity took the sample site for another company’s product with the same short name. After a two-word distinctive name and a “we’re not that product” line, it described the site correctly on 24 September (own measurement).
Step 2: Plan
The page plan
Few pages, but the right ones.
| Page | Its job | Schema |
|---|---|---|
| Home | Says who you are in one sentence; links to every important page | Organization, WebSite |
| Situation pages | One per customer situation; the answer in the first sentence | Service, FAQPage, BreadcrumbList |
| Pricing | Prices in plain text, the same numbers as llms.txt | Service, Offer |
| Comparison guide | A neutral answer to “which tools do X?”, competitors included | Article, ItemList |
| FAQ and About | Real questions; who is behind it; the not-X note | FAQPage, AboutPage |
| Guide or PDF | Something others want to link to | Article |
| llms.txt and 404 | A summary for assistants; a real 404 status | — |
Login, signup, checkout, thank-you and site-search pages get noindex,follow and stay out of the sitemap. On a new domain, publish 5–10 distinct pages a week, and stop any template whose “Crawled – currently not indexed” rate passes about 30%.
Anatomy of a situation page
- Title: situation first, brand last, about 60 characters. The meta description is the sentence you want the assistant to say.
- H1: the customer’s own sentence; the URL uses the same words.
- First 1–3 sentences: the answer, in four parts. This is the block assistants quote.
- One immediate action: a file drop box, a trial or a price.
- Proof: one verifiable number with its date.
- How it works: 3–5 steps in plain HTML text.
- Who it’s not for: 2–3 lines.
- Alternatives, named honestly.
- FAQ: 5–8 questions in the customer’s words, each answered in its first sentence.
- Related pages: text links; every page gets at least one inbound link.
- A real update date (moved only when the words change), an author and valid JSON-LD.
The brief you hand to your coding tool before writing:
Situation: [the customer's sentence]
URL: /[words-from-the-sentence] Title: [situation] — [brand]
First line: [brings] → [we do] → [they get]. [fear unnecessary].
Action: [file box / trial / price]
Proof: [number, source, date]
Not for: [2–3 lines]
Alternatives: [competitor: who it suits]
FAQ: [5–8 questions in the customer's words]
Related: [3–5 URLs]
katman_page_brief fills this in from your research file.
Don’t ask the visitor again what they want
A visitor from ChatGPT arrives with the situation they already described. On our sample site (own measurement, 21–27 September 2026):
- The first quiz question lost about 40% of visitors, so visitors from ChatGPT now skip the quiz.
- A file drop box went on the two pages ChatGPT linked to most; 52 of the first 68 generations used the visitor’s own file.
- Four people who arrived with a file bought a plan that didn’t accept files, and two cancelled within an hour. Checkout now opens on the plan that matches their intent.
The rule: don’t make someone from ChatGPT explain themselves twice. The page’s job is to start solving their situation in the first minute.
Step 3: Build with the prompt book
Give the prompts to your AI coding tool in order and don’t move on until the acceptance criterion passes. P1 and P14 change nothing; they only check.
| Prompt | Job | Accept when |
|---|---|---|
| P0 | Context at the start of every session | The tool summarises research.md and gets your OK on the page plan before writing code |
| P1 | Audit without changing code | Every public page is in the table, with clear answers on 404s, rendering and orphan pages |
| P2 | Move text into HTML | With JavaScript off, every page’s H1 and first paragraph are readable |
| P3 | Head tags from one source | A test shows no two pages share a title or description; og:image opens |
| P4 | robots.txt and sitemap.xml | No Disallow: /; every sitemap URL returns 200 and is canonical; no noindex page in the sitemap |
| P5 | Schema (JSON-LD) | No errors in Google’s Rich Results Test; every price and claim in the schema is on the page |
| P6 | Write a situation page | The first three sentences answer alone; no [FILL] left; at least one page links to it |
| P7 | Comparison guide with competitors | Every competitor fact has a source and date; our own weakness is written too |
| P8 | llms.txt and the not-X note | No price or claim in llms.txt contradicts the pages |
| P9 | Images | No <img> without alt; nothing over 200 KB; CLS under 0.1 |
| P10 | Internal and broken links | 0 orphan pages, 0 broken internal links |
| P11 | 404s, redirects, preview URLs | A missing page returns 404; http, www and preview URLs redirect to the main address or return noindex |
| P12 | Speed and mobile | LCP ≤ 2.5 s and CLS ≤ 0.1 on three pages; no horizontal scroll at 360 px |
| P13 | Count ChatGPT visitors and bots | The ChatGPT channel counts visits without a referrer; bot counts come from the server |
| P14 | Final check before every publish | Every cell of the check table passes, and the script is in the repo |
katman_prompt returns each prompt filled with your own data, and Katman’s audit and lint tools check the criterion (all tools).
Step 4: Verify
Don’t take “done” from your coding tool on trust. Run the checks yourself: the one-minute tests are on My vibe-coded site is invisible to ChatGPT.
Tell the search engines
| Where | What to do | What we saw on 29 Sep 2026 |
|---|---|---|
| Google Search Console | Domain property via DNS; submit the sitemap; request indexing for key pages | About 10 requests a day; find out why a page isn’t indexed before resubmitting |
| Bing Webmaster Tools | Import from Search Console; submit the sitemap; URL Submission | 100 URLs a day; Copilot reads Bing |
| IndexNow | Key file at the root; send only URLs whose text changed | The sample site first sent all 173 URLs on every deploy |
| Brave Search | search.brave.com/submit-url, one URL at a time | No IndexNow; follows your Googlebot rules |
| Cloudflare or other CDN | AI bot block, Bot Fight Mode, AI Labyrinth, managed robots.txt | katman.pro’s training-bot block was on; we turned it off |
After 14 days, “Discovered – currently not indexed” usually means missing internal links: that was the cause for 35 pages on the sample site, fixed with footer links. “Crawled – currently not indexed” means the pages aren’t distinct enough.
Measure the right way
- Question set: 12 unbranded questions (3 situation, 2 tool, 2 “best X”, 2 alternative, 2 language, 1 problem) and 2 diagnostics: “What is [brand]?” and “What is [brand] ([domain])?”.
- Human filter: a session counts as human only if it scrolled, saw more than 2 pages, finished a step, signed up or paid. In the sample site’s first week, 528 of 1,546 sessions passed (own measurement).
- Channel rule: ChatGPT means a
chatgpt.comreferrer orutm_source=chatgpt.comin the link; 79% of the sample site’s ChatGPT visitors had no referrer. - Bots on the server: crawlers don’t run your analytics script, so count them from server logs.
- Official reports: Search Console’s generative AI performance report (Google) and Bing’s AI Performance report (Bing).
- Re-ask every 14 days. One run is a small sample; see visibility runs.
Off-site: mentions instead of bought links
Publish YouTube explainers on the pages they explain, get listed in real directories, and ask the assistant “which articles did you use?” so you can send each list author one short, factual note. On Reddit: no fake accounts, disclose every mention, and only help for the first 14 days. Don’t buy links or reviews: Google’s spam policies cover link schemes and attempts to manipulate AI answers, and the UK’s DMCC Act 2024 bans fake reviews. Our own weak spot: katman.pro had 3 external links from 2 sites in Search Console on 29 September 2026.
What worked and what didn’t
Own measurement on our sample site, 21–29 September 2026. The strength labels are ours.
| Practice | Evidence | Strength |
|---|---|---|
| Situation pages, answer first | 59% of ChatGPT visitors landed on two of them; 8 of 17 payers came from one | Strong |
| One sentence in first line, meta description and llms.txt | ChatGPT repeated all four parts | Strong |
| Open robots.txt, HTML without JavaScript | OpenAI bots made 750+ requests with 0 errors | Strong |
| Honest list guides | 24 ChatGPT visitors in week 1 | Medium |
| Two-word name and a not-X line | Perplexity recognised the domain within 2 days | Medium |
| Perplexity | Named in 0 of 12 buyer questions | Didn’t work yet |
| “Best X” questions, Bing and Copilot | Big brands named; 0 Bing pages on 24 Sep | Didn’t work yet |
| Claude | 122 page opens, 0 clicks | Read, not clicked |
Mistakes we made
The book lists 21; these cost us the most:
- Every date was launch day in the sitemap, Article schema and RSS. Dates now move only when the words change.
- llms.txt contradicted a page, with two prices for one feature. Pages and llms.txt now come from one facts file.
- A claim bigger than the proof: “we pick the best model for every category and language”, based on 7 samples rated by 1 person. We narrowed it and stated the test size.
- One fix broke another:
Cache-Control: no-transformswitched off HTML compression, and pages went out about 4× larger. - Counting bots as people: a PDF link checker created 704 fake sessions in one day.
- Scaled AI blogging: another of our sites published 203 AI-generated posts on a new domain between 19 July and 10 September 2026. By 10 September, 103 of its 106 non-indexed pages were “Crawled – currently not indexed” (own Search Console data).
The full numbers are in the case study, and all 21 mistakes are in the book.
Sources. The Katman book (29 September 2026); Google Search Central (AI optimization guide, spam policies, JavaScript SEO basics); Bing Webmaster Guidelines; IndexNow. Sample-site figures come from the site’s own analytics (21–28 September 2026, human sessions only); the site is Rnify Limited’s own product, not a client. Written by the Katman team, Rnify Limited.
Frequently asked questions
Do I need Katman to use the method?
No. The method is on this page and in the Katman book. Katman is an MCP server that runs it inside your AI coding tool and checks each acceptance criterion for you.
How long does the method take?
The book’s plan is 30 days: research and a first measurement in week 1, technical fixes in week 2, situation pages in week 3, measurement and off-site work in week 4. After that, re-measure every 14 days.
Why does every prompt have an acceptance criterion?
Because an AI coding tool told to “optimize SEO” adds a meta tag and stops. A measurable job with a pass-or-fail check, such as “no two pages share a title”, is something you can verify.
What is a situation page?
A page written for one situation a customer describes to an assistant, with the H1 in the customer’s words and the answer in the first 1–3 sentences. On our sample site, 59% of ChatGPT visitors landed on two such pages (own measurement, 21–27 September 2026).
How many pages should I publish per week?
On a new domain, 5–10 distinct pages a week. If a template’s “Crawled – currently not indexed” rate passes about 30%, stop producing pages from it and merge instead.
Does the method work for Perplexity and Claude too?
The gates are the same, but our evidence there is weak. Our sample site was named in 0 of 12 Perplexity questions, and Claude opened its pages 122 times without sending a click (own measurement, 21–27 September 2026).
What should I do first?
Test the first gate. Check that GPTBot, OAI-SearchBot and ClaudeBot get a 200 from your home page and that your text is in the HTML without JavaScript; if either fails, fix that before anything else.