Dev.to AI 🤖 Ai 👁 0 📖 5 min read

I generated 320 SEO pages with one command. Here's the full stack (and what broke).

Three days ago I published a post about deploying 35 MCP servers in 10 days. It got some attention, but the honest takeaway was: 0 revenue, 0 users, 35 perfectly configured servers. Configuration is not distribution. Th

Three days ago I published a post about deploying 35 MCP servers in 10 days. It got some attention, but the honest takeaway was: 0 revenue, 0 users, 35 perfectly configured servers. Configuration is not distribution.

This is the follow-up. Three days later, here's what actually changed.

The number that matters
220 to 320 SEO pages.

Not manually written. Generated with one command.

The command reads products.json (320 products), calls my own HS Codes API for each product, fills an HTML template, and writes 320 static pages into the output directory. It also generates sitemap.xml, llms.txt, and a catalog index.

Then two more commands: deploy to Cloudflare Pages, and submit all URLs to IndexNow.

Three commands. 320 pages live. 325 URLs submitted to Google, Bing, Yandex, and Seznam.

What I learned about SEO at scale

  1. Schema.org is not optional.

Every page has four JSON-LD blocks: Product (with the HS code as SKU), BreadcrumbList, WebSite with SearchAction, and FAQPage with three real questions per page.

Why does this matter? Because Google's rich results show breadcrumbs, product info, and FAQ snippets. That's free real estate in search results. You can validate any page at search.google.com/test/rich-results. My pages pass cleanly.

  1. Cloudflare Pages does clean URLs by default.

I didn't know this until I tested it. Requesting /pages/terms.html returns a 308 redirect to /pages/terms. Requesting /pages/terms returns 200 OK.

This means you should never link to .html in your sitemap or internal links. Google treats redirects as a minor signal, but you lose a tiny bit of link equity on every hop.

The fix is one file: _redirects in the root, with one line. That's it. Now every .html request gets a clean 308 redirect to the canonical clean URL.

  1. IndexNow is the fastest way to notify search engines.

Google has Search Console. Bing has IndexNow.

IndexNow is an open protocol that lets you push URLs directly to Bing, Yandex, Seznam, and Naver. No crawling queue, no waiting for sitemap processing.

I submitted 325 URLs yesterday. Today, Bing shows the site in site: search.

What broke (the honest part)
Product Hunt failed.

I launched HS Codes Classifier on October 1st. It got 1 upvote. Not featured. The launch was effectively invisible.

Why? Because Product Hunt rewards existing audience, timing, and hunter relationships. I had none of the three.

I'm not re-launching. I'm focusing on channels that don't require pre-existing audience: search engines, organic distribution, and technical content like this post.

Suby cards are blocked for Ukraine.

I set up Suby (a Ukrainian crypto payment provider) to accept USDC for my $9.99/month Pro tier. The crypto checkout works. But cards are blocked for Ukrainian accounts. Suby requires a business entity in a supported jurisdiction.

Workaround: I'm looking at AgentaOS, a Merchant of Record that supports more countries. That verification is still in progress.

AgentaOS verify was rejected.

They asked for three things: branded support email at my own domain, live product proof, and proof of how customers receive their Pro API key. Fair feedback. I'm buying a domain this week and fixing all three.

What is actually working
The infrastructure, finally.

Three days ago, my dashboards were empty. Today: 1,459 API calls in 24 hours, 215 LLM calls to OpenAI, 0 errors across all workers. Sentry catches errors before users see them. UptimeRobot monitors 4 endpoints with 100% uptime. Ops Bot sends a daily digest at 9:00 AM Kyiv time.

Git backup, for the first time.

Before this week, my entire hs-seo project lived on a single laptop. If the drive failed, I would lose everything. Now there are 3 private GitHub repos: hs-seo, ops-bot, call-counter. Every code change is committed. The output directory with all 320 HTML files is regenerable from products.json and generator.js.

Google Sheets Add-on, submitted for review.

I built =HSCODE("laptop computer") as an Apps Script function. It returns 8471.30 in any cell. Then I created a GCP project, set up OAuth consent screen, enabled Workspace Marketplace SDK, and submitted for review.

Status: in review. If approved, this becomes a distribution channel. 3 billion Google Sheets users can install it.

The uncomfortable truth
Configuration is still not distribution.

I have 320 pages, and Google has indexed zero of them. Bing has indexed a handful. Yandex nothing yet.

That is normal. Google's crawl queue processes new sites slowly. Based on experience: Week 1 to 2 for the first pages, Week 3 to 4 for most pages, Month 2 to 3 for first organic impressions, Month 4 to 6 for first organic traffic.

The infrastructure is ready. Now it is a waiting game.

Meanwhile, I am not waiting idle. This week: Revenue Bot (Telegram notification on every new payment), PostHog (funnel analysis from Landing to Payment), Langfuse (LLM observability with prompt, response, cost, latency).

What I would tell my past self
Start with distribution, not infrastructure.

I spent 10 days building 35 MCP servers. If I had spent 2 days building one server and 8 days marketing it, I would probably have 10 paying users by now.

The infrastructure is a trap. It feels productive. It is not.

Ship on channels that do not require permission.

Product Hunt needs a hunter. Reddit needs karma. HN needs luck. But search engines do not need anything. You publish, they index. Given enough pages and enough time, organic traffic compounds.

Every page needs to answer a question.

"HS code for laptop" is a question. My page answers it in 2 seconds with a real HS code, a confidence score, and a reasoning paragraph. That is the entire value proposition. No marketing required.

The metrics that matter are not the metrics you see daily.

Daily API calls do not pay rent. Monthly recurring revenue does. I keep forgetting this.

What is next
Immediate: buy a domain, unlock Email Routing and AgentaOS. Resubmit AgentaOS verify with branded email. Get Google to index the first 50 pages via URL Inspection.

This week: PostHog, Langfuse, Revenue Bot. Google Sheets Add-on approval (hopefully). First Dev.to backlink chain.

This month: 500+ SEO pages. Real organic traffic from Google. First $9.99 payment.

I will write the next update when the first payment comes in, or when the wait becomes long enough that I need to write about it anyway.

Try it
Google Sheets: open a new sheet, go to Extensions, Apps Script, paste the code from my GitHub. Then in any cell: =HSCODE("iPhone 15 Pro"). You will get 8517.12.

API: https://hs-codes-classifier.boring-saas-infra.workers.dev/dev-classify — POST with a description field. Free, 50 calls per day.

Catalog: https://boring-saas-infra.pages.dev/catalog — 320 products, each with an HS code.

Pricing: https://boring-saas-infra.pages.dev — Free tier, $9.99 per month Pro.

If you have found a distribution channel that actually works for indie products in 2026, I would love to hear about it. I am still searching.

📰 Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.