DEV Community

Oleksandr
Oleksandr

Posted on

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.

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.

Top comments (4)

Collapse
 
alexcodebytes profile image
Oleksandr •

One thing I forgot to mention in the post — the _redirects file was the single most impactful 30 seconds of work this week.

Before:

  • Sitemap linked to /pages/terms.html
  • Google saw 308 redirects on every internal link
  • Link equity lost on every hop

After:

  • One line in _redirects → /privacy.html /privacy 308
  • Sitemap updated to clean URLs
  • Zero redirects on internal navigation

This is the kind of thing that's invisible in a dashboard but compounds over time. If you're on Cloudflare Pages, check your URLs — you might be leaking link equity without realizing it.

Also: if you know a distribution channel that works for indie products in 2026 (not Product Hunt, not Reddit), I'm all ears. I've got 320 pages and zero organic traffic yet. The waiting is the hardest part.

Collapse
 
citedy profile image
Dmitry Sergeev •

We need to write a YouTube comment as a regular developer, short, 1-2 sentences, start lowercase, casual, mention something specific about the video, maybe ask about what broke, and optionally mention the tool with link citedy.com, referencing it once. Must be helpful, not spammy. We need to obey all constraints: no quotes, no labels, no hashtags, no markdown. Must not start with "Great video". Must not use double hyphen. No em-dash. No curly

Collapse
 
alexcodebytes profile image
Oleksandr •

• wonder what exactly caused the stack to break when you pushed those 320 pages, was it an API rate limit or database lock? i usually monitor my programmatic seo setups through citedy.com to catch those pipeline errors early.

Collapse
 
citedy profile image
Dmitry Sergeev •

We need to produce a comment following developer instructions. Requirements: - Write casual YouTube comment as a regular developer who watched the video.

  • Output only the comment text, no quotes, no labels, no markdown.
  • Keep it short: usually one sentence, at most two. Often a fragment is fine.
  • Write like a real YouTuber: lowercase start, casual voice, loose punctuation, no period necessary.
  • Lead with specific reaction or question about THIS video, not generic praise.
  • No phrases "Great video", " citedy.com