
Agency quoted me $1,800/mo + $1,400 setup for 4 articles, then I found out it was ChatGPT. Spent a year building the system myself instead.
Hey all,
I'm a small business owner, I run a software company in the marketing space. Spent a long time building out our sites and the traffic still wasn't where I wanted it, so I started learning SEO myself.
Didn't take long before I decided I'd rather hand it off and go back to building. So I started talking to agencies.
Problem was the pricing (first one quoted me $1,800/month plus a $1,400 setup fee for like 4 articles a month) and then when I actually asked about their process, they were running the content through ChatGPT anyway. They just had a system built around it.
So I spent the last year building that system myself, tweaking & improving it as I went. Here's what's actually worked:
1. Keyword research is what steers everything else
Sounds obvious, I still got it wrong for months. Never prompt the AI to "pick a topic and write." Pull keywords that have real intent behind them, check what's already ranking, and look specifically for gaps where competitors have coverage and you have nothing. I use Semrush + DataForSEO for this and it's worked well. Writing for volume without matching intent is how you end up with 50 articles ranking for nothing, which I know because that's what I did first.
2. Deep research for every article
Scrape the top 10 pages for the keyword, pull out what they cover, what questions they answer, what entities they mention. That all becomes context for the writing step. Skip it and you get the generic AI article anyone can spot in two sentences.
3. RAG over your own site pages
Crawl your pages, embed them, give the writing agent retrieval access. Two payoffs: it stops repeating topics you've already covered (cannibalization), and it describes your product accurately instead of making up features. Helps a lot with internal linking too.
4. Internal linking needs its own dedicated pass
This was one of the biggest single lifts for me and almost nobody does it properly. After generating, semantically match the new article against everything you've already got and insert links in both directions. New article points to old ones, old ones get updated to point at the new one. Vary the anchor text. An orphan page is a page that doesn't rank.
5. Pillar / cluster structure
Pick 4 or 5 core topics as pillars. Everything you publish is a cluster page linking up to its pillar. Google reads that as topical authority. Without it you've just got 200 unrelated posts and no signal.
6. Refresh your content on a schedule
Content decays. Every 2 to 3 months I re-run the research step on the top 20% of pages, update the stats, add sections for subtopics that have come up since, resubmit. Refreshed pages usually outperform brand new ones for a fraction of the effort. That one surprised me.
7. Put a real author on each post
Same articles, but with a real byline linked to an actual LinkedIn or X profile. It moved the needle. E-E-A-T isn't a myth and faceless content underperforms.
8. Image quality matters more than you'd think
If your images look obviously AI generated, bounce rate goes up. I can't prove what Google does with Chrome data and I know that one gets argued about, but the correlation between bad images and bad dwell time was consistent enough on my sites that I stopped fighting it.
9. Backlinks
When we started adding backlinks to the system, that's when we saw the biggest jump in the number of keywords we were ranking for. Content on its own plateaued after 6 months.
What didn't work
10. "JSON schema so AI can read your page." Structured markup still helps for rich snippets in classic search, that part's fine. But LLMs are built to process natural language, that's the whole point of them. Clear prose with real numbers in it does far more.
11. More than about 5 new pages a day. Crawl budget is finite and it gets allocated based on how much authority Google thinks your site has. Dump 100 pages at once and most of them just sit there undiscovered. Spreading it out sends a sustained freshness signal and that compounds. One a day for a year beats 365 in a month, and it isn't close.
12. llms.txt. Doesn't do anything useful. Not risky, just a waste of time. Same for making markdown versions of your pages, for the same reason as the schema thing. You're structuring data for a model that was specifically built to handle unstructured data.