How I Actually Got a Developer Blog to Rank (After Years of Doing It Wrong)
For about a year I ran a technical blog that got almost no organic traffic despite, in my own biased opinion, having genuinely useful content. I was doing everything I thought SEO required — meta descriptions on every post, a sitemap, keywords stuffed into headings in a way that read a little unnaturally. Traffic stayed flat around a few hundred visits a month, almost entirely from people who already knew me. Then I rewrote my approach almost entirely, and within about eight months organic search became my single largest traffic source, ahead of social and referrals combined. The gap between what I thought mattered and what actually mattered was bigger than I expected, so I want to walk through both sides honestly.
Topic selection matters more than anything else on this list
This sounds obvious in retrospect but I genuinely didn't internalize it for a long time: you cannot out-optimize a bad topic choice. I used to write about whatever I'd been thinking about that week — broad reflections, opinion pieces, "thoughts on the state of X." Interesting to write, nearly impossible to rank, because nobody is searching for "thoughts on the state of X" with any specificity Google can match to intent.
What actually ranks is content that answers a specific, searchable question someone types into a search bar while trying to solve a real problem at 11pm. "Why is my Postgres query slow" gets searched. "Reflections on database philosophy" does not. I started keeping a running list of actual error messages, actual questions I googled myself, and actual Stack Overflow threads I ended up on during real work, and that list became my editorial calendar. The single best traffic driver I ever wrote was a post titled almost exactly after an error message I'd hit and struggled to debug — because I was writing for the exact person who was where I'd been three days earlier, searching that exact string.
A decent way to validate a topic before committing real writing time to it is just checking what's already ranking for it. If the top five results are all outdated (last updated three-plus years ago), thin (a two-paragraph forum answer), or from low-authority sites, that's a gap you can credibly fill. If the top results are already comprehensive, recent, and from a domain with real authority, you're not going to out-rank them with effort alone in a reasonable timeframe — better to find the adjacent angle nobody's covered well.
Technical SEO: the boring 20% that's still necessary
I don't want to oversell technical SEO — it's necessary but not sufficient, and it's the part everyone obsesses over because it's the part with a checklist. Still, get it wrong and none of your content strategy matters because the content won't get indexed properly or will get misrepresented in search results.
The essentials, none of which are exotic:
Why Your Postgres Query Is Slow: A Guide to EXPLAIN ANALYZE
Structured data matters more than people give it credit for, specifically for getting rich results (the little star ratings, author info, or FAQ dropdowns you see in search results). For a blog post, Article or BlogPosting schema is the baseline:
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Why Your Postgres Query Is Slow",
"datePublished": "2026-03-14",
"dateModified": "2026-07-02",
"author": { "@type": "Person", "name": "Your Name" }
}
That dateModified field is doing more work than people realize — search engines do weight content freshness, and if you update an old post with new information, updating that timestamp (and actually changing the content, not just the date) is a legitimate, non-manipulative way to signal continued relevance for evergreen topics.
A sitemap and clean robots.txt are table stakes, not a growth lever, but skipping them is an unforced error. If you're on Next.js, generating the sitemap dynamically rather than hand-maintaining it removes an entire category of "forgot to update the sitemap" bugs:
// app/sitemap.ts
import { getAllPosts } from "@/lib/posts";
export default async function sitemap() {
const posts = await getAllPosts();
return posts.map((post) => ({
url: https://example.com/blog/${post.slug},
lastModified: post.updatedAt,
}));
}
Internal linking is the lever nobody talks about enough
This was the single biggest surprise for me. I assumed internal linking was mostly a UX nicety — help readers find related content, keep them on the site longer. It turns out it's also one of the more direct ways to tell search engines which pages on your site actually matter, and to pass authority from your well-ranking pages to your newer ones.
My old approach was linking opportunistically, whenever it felt natural mid-sentence. My new approach is deliberate: every new post gets at least three internal links to older, relevant posts, and — this is the part I skipped before — I go back and add links from old high-traffic posts to new posts when they're genuinely relevant. A six-month-old post that's ranking well and getting steady traffic is a much better source of internal link equity pointing at a brand-new post than the reverse, and most people only ever link forward in time, never backward.
I also started building small topic clusters deliberately — a handful of posts on related subjects (say, Postgres performance, connection pooling, and query optimization) that all link to each other, with one designated as the "pillar" post that's more comprehensive and gets linked from all the others. This is a well-known pattern but I underestimated how much it actually helped until I tried it: the pillar post's ranking improved noticeably once three or four supporting posts existed and linked into it, likely because it signaled topical depth and relevance across a cluster rather than a single isolated page.
Writing cadence: consistency beats volume
I want to push back gently on the advice to publish constantly. I tried a "two posts a week" cadence for a stretch and the quality dropped noticeably — I was writing to fill a schedule, not because I had something worth saying, and readers and search engines both seem to notice thin content eventually, even if it takes months to show up in rankings. What actually worked better was a genuinely sustainable cadence — for me, roughly one solid post every two to three weeks — where every post cleared a bar of "this took me real effort to research and I learned something writing it." Depth beats frequency for a technical audience specifically, because technical readers bounce hard off content that feels like it was written to hit a word count rather than to actually explain something.
The myth I wasted the most time on was keyword density — the idea that repeating your target phrase a certain number of times per hundred words meaningfully helps rankings. Modern search ranking is much more about topical comprehensiveness and matching search intent than exact phrase matching. I stopped worrying about hitting a keyword a specific number of times and started worrying about whether the post actually, comprehensively answered the question in the title, including the follow-up questions a reader would naturally have. That shift alone did more for rankings than any density formula I'd been following.
What actually moved the needle, ranked honestly
If I had to rank what mattered by actual impact on organic traffic, it would go: specific, searchable topic selection first, by a wide margin; internal linking and topic clusters second; consistent publishing of genuinely useful content third; and technical SEO fundamentals (meta tags, sitemap, structured data) a distant fourth — necessary to not actively sabotage yourself, but not something that moves traffic on its own. I spent my first year almost entirely focused on that fourth category because it was the most concrete and checklist-able, and it's the one that mattered least. If you're starting a developer blog today, spend your effort where I eventually ended up spending mine: write the post that answers the exact question someone's stuck on right now, link it thoughtfully to the rest of what you've written, and do that consistently enough that a body of interconnected, genuinely useful content builds up over time. That compounding effect, not any individual trick, is what actually got my traffic to move.
Related Posts
Sponsor Our Newsletter
Reach thousands of developers who are actively evaluating AI tools, MCP servers, and dev infrastructure. Our weekly newsletter goes to engaged technical decision-makers.
All sponsored content is clearly labeled per our editorial policy.