I built PayPerQR. Pushed it live. Bought a domain. Refreshed the dashboard.
Zero visits.
A week later, still zero. Two weeks, still zero. I started blaming the launch post, the positioning, the niche. Maybe QR codes were dead. Maybe nobody cared.
Then I built Toast Photos. Same thing happened. Zero. I told myself it was a marketing problem. Not enough promo. I needed more X posts, better hooks, a launch video, a Product Hunt day.
I was wrong. The problem wasn't marketing. The problem was that Google had no idea either site existed.
I had shipped two apps into a complete void, for months, and didn't realize until I finally sat down with Claude to figure out why my analytics were blank. Turns out SEO and analytics don't matter if you haven't done step zero. And step zero isn't in any of the content I'd been reading.
So this week I want to save you the two months I lost. Here's what I'd tell past me, what actually broke in my setup, and the exact AI prompts that walked me through the fix.
the assumption that cost me two months
I'm not a marketer by training. I build things. So when people talked about SEO, I heard "write good content and Google figures it out."
That's half true. Google figures it out eventually, if it knows you exist in the first place.
Here's what I assumed:
Buy a domain. Point it at my app. Google finds it because Google finds everything.
Write some landing copy. Add a few keywords. Organic traffic shows up.
If no traffic shows up in week one, it's a content problem, not an infrastructure problem.
Every piece of that was wrong.
Google doesn't find your site automatically. Google finds sites that other sites link to, plus sites that explicitly tell Google they exist. New indie domains with no backlinks fall into a third category: invisible. You can refresh your analytics all you want. There's literally nothing to measure, because Google's crawler hasn't been to your site. Which means none of your pages are in the index. Which means they can't rank for anything, because you're not a candidate for ranking in the first place.
No index. No rank. No traffic. No analytics signal. No clue what's wrong.
That's the trap. And almost nobody mentions it, because everyone writing about SEO assumes you already made it past step zero.
what "indexed" actually means
Quick detour because the terms get thrown around like they're obvious. They're not.
There are three things happening, in order.
Crawling. A bot shows up at your URL and downloads the HTML. That's it. The bot has been to your site.
Indexing. Google's systems read what the bot downloaded, decide it's worth storing, and add it to their giant searchable database. Now your page exists in Google's memory.
Ranking. When someone types a search, Google picks from indexed pages and orders them by relevance. This is the part everyone obsesses over. But it only applies to pages that got through the first two steps.
My apps were stuck at step zero. No bot had ever shown up. Nothing was in the index. Nothing was rankable. I was optimizing for step three while step one had never happened.
You need to tell Google about your site directly. That's what Google Search Console is for. It's not analytics. It's the front door where you hand Google a map of your site and say "please come read this."
the fix, walked through with AI
I'd already been burned by this twice with PayPerQR and Toast. But I still had a third app, Distribution OS, sitting there with no Search Console setup, no sitemap, no robots.txt, and nothing telling Google it existed. So I sat down with Claude this week and walked through the whole setup live. That's what the screenshots below are from.
I'll be honest: I didn't want to read Google's documentation. I wanted someone to tell me what to click and what to paste. So I opened Claude, treated it like a patient engineer sitting next to me, and pasted my actual app into the conversation.
Here's exactly what happened.
step 1: get search console set up
This step is mostly UI clicks, not prompts. The flow is:
Go to search.google.com/search-console → Add property → Domain (not URL prefix). Type your domain.
Google shows you a
TXTrecord that looks likegoogle-site-verification=.... Copy it.Go to wherever your DNS lives. For me it's Vercel:
vercel.com/[team]/~/domains/[your-domain]→ DNS Records → Add → Type:TXT, Name:@, Value: paste the verification string.Wait ~30 seconds for propagation. Back in Search Console, click Verify.
Mine went green instantly because Vercel's DNS propagates fast.

The first time I saw "Ownership verified," I actually said the word "oh" out loud. Because it was that easy, and I had spent two months not doing it.
step 2: submit a sitemap that actually works
The next thing Search Console wants is a sitemap. A sitemap is just a file that lists every URL on your site, in a format Google can read. Most frameworks can generate one for you. Mine didn't have one at all.
The prompt I typed:
i just set up google search console for distributionos.dev and it wants a sitemap. but my next.js app doesn't have one. can you add sitemap.ts and robots.ts? you can check my app folder structure and configure it. Let me know if you need more info.
Claude scanned my app routes and wrote both files. For Next.js 16 App Router, sitemaps go at src/app/sitemap.ts and robots go at src/app/robots.ts. Both are metadata routes — Vercel builds them automatically into /sitemap.xml and /robots.txt. No extra config.
Here's what the live sitemap looked like after the deploy — seven URLs covering all public pages, excluding the dashboard and API:

I submitted the URL in Search Console. First attempt showed a red error:

For about thirty seconds I thought something was broken in the sitemap I'd just shipped. Refreshed the dashboard. Different story:

Same submission. Two contradicting views. Turns out Search Console's outer list caches the first-attempt result, while the detail view shows the true state. The fetch actually worked on the retry a few seconds later, which is the normal behavior for a newly-submitted sitemap. Trust the detail view. If it says "processed successfully" with a discovered-pages count, you're good.
For the first time since buying the domain, Google had actually read my site. Seven pages discovered.
step 3: the robots.txt gotcha
One more thing caught me. The robots.txt Claude generated was reasonable, but I had a rule I wanted to double-check.
The prompt I typed:

Claude spotted a subtle bug. I had written Disallow: /audit/*/ to block individual user audit result pages. Problem: that wildcard requires a trailing slash to match. Next.js App Router generates URLs like /audit/abc123 (no trailing slash) for dynamic routes. So the rule wasn't actually blocking what I thought it was blocking.
Fix: switch to an explicit-allow pattern.
Before:
User-Agent: *
Allow: /
Disallow: /api/
Disallow: /dashboard/
Disallow: /login
Disallow: /signup
Disallow: /audit/*/
Host: https://distributionos.dev
Sitemap: https://distributionos.dev/sitemap.xml
After:
User-Agent: *
Allow: /
Allow: /audit
Allow: /audit/battle
Disallow: /api/
Disallow: /dashboard/
Disallow: /login
Disallow: /signup
Disallow: /audit/
Sitemap: https://distributionos.dev/sitemap.xml
Two changes. The Disallow: /audit/ blocks the entire /audit/ tree, then two explicit Allow lines punch holes for the specific pages I actually want indexed (the main audit tool and the battle page). Claude also flagged that my Host: directive was Yandex-only; Google ignores it. Dropped it.

Rule of thumb I picked up from this: robots.txt is a suggestion to well-behaved crawlers. If you actually want to keep pages out of search, use a <meta name="robots" content="noindex"> tag server-side. That's enforced at the page level, not trust-based.
step 4: the redirect chain
The last bug was the sneakiest. Some of my entry points were taking more hops than they needed to reach the canonical URL. Google handles up to about five hops without giving up, but every hop is a chance for the crawler to lose interest and bounce. Every flattened redirect is free crawl budget back.
The prompt I typed:

Claude traced every entry point and mapped the chain. Here's what came back:
1. https://distributionos.dev → 200 (terminal) ✓
2. https://www.distributionos.dev → 308 → apex (1 hop) ✓
3. http://distributionos.dev → 308 → https apex (1 hop) ✓
4. http://www.distributionos.dev → 308 → 308 → apex (2 hops)
Three of four were already clean. The only 2-hop entry was http://www.*, and it was 2 hops because Vercel's edge upgrades HTTP → HTTPS before running the domain rewrite. I could flatten the main www → apex path by explicitly configuring it in Vercel.
The fix — one config change: In the Vercel project → Domains → Add Existing → www.distributionos.dev. Then — and this matters — uncheck the default checkbox that says "Redirect distributionos.dev to www.distributionos.dev (Recommended)." Vercel's "recommended" default is the opposite of what I wanted. With that unchecked, select "Redirect to Another Domain" → target distributionos.dev → 308 Permanent Redirect. Save.
After that, https://www.distributionos.dev collapses to https://distributionos.dev in a single 308. The remaining 2-hop path (http://www.*) is unavoidable without turning off HTTPS enforcement, which isn't a trade I'd make.
Right now, 24 hours after everything was submitted, Search Console shows 7 pages discovered, crawl scheduled, indexing in progress. The real ranking numbers are a week or two away. But the plumbing is right for the first time in two months. No more shipping into a void.
what i'd tell past me
Five things I wish someone had said to me before I shipped my first app.
Google doesn't find you. You have to show up first. Every domain starts invisible. Your first job isn't writing SEO content. It's getting added to the index. Before you worry about keywords, worry about whether Google has any idea your site exists.
Search Console is step zero, not an advanced move. I thought it was an analytics thing for big sites. It's a front door any new site has to walk through. If you haven't verified your domain and submitted a sitemap, nothing else matters.
Your sitemap is probably broken and you don't know it. Frameworks generate them, but redirects, rewrites, and DNS quirks break them in ways you only see in Search Console. Submit it. Check the error. Fix the thing Search Console tells you is wrong. Don't assume it works.
AI is a cheat code for infrastructure work like this. I'm not fighting through documentation anymore. I paste my config, describe what's failing, and Claude finds the bug faster than I could on a good day. The key is asking for a walkthrough, not an explanation. "Tell me what to click" beats "explain SEO to me."
Zero traffic is rarely a content problem for brand new domains. If no one is visiting, it's usually because no one can find you. Check step zero before you blame the niche, the positioning, or the launch.
one last thing
Once your site is actually in the index, the next question is whether AI tools like ChatGPT, Claude, and Perplexity will cite you. Getting into Google is step one. Getting into the AI answer layer is step two, and it works a little differently.
That's what I’ll be testing next.
See you Tuesday, Hey
P.S. if you want a quick gut check, reply with your domain and I'll tell you if Google has indexed it. takes me about 30 seconds to look and it's the fastest win I can give you.
.
