Skip to main content
BlogCareer

Growing an Engineering Blog with SEO: What Actually Worked

How I took a bilingual engineering blog from zero organic visits to steady long-tail search traffic using structured data, disciplined metadata, and internal linking, not guesswork.

Matthews Wong

Software Engineer

July 20268 min read
Growing an Engineering Blog with SEO: What Actually Worked

Photo by blprnt_van on flickr

Key Takeaway

An engineering blog gains long-tail organic traffic not through generic SEO tips but through disciplined engineering: keyword-first titles under 63 characters, server-rendered metadata and JSON-LD structured data generated per post, five-question FAQ schemas, and an internal linking system connecting every article to related posts in the same category.

When I relaunched this blog, my first few posts got almost no organic traffic. They were technically fine articles about ERP systems and DevOps tooling, but nobody was finding them, because I was writing for myself instead of writing for how people actually search. Over the following months I rebuilt the entire publishing pipeline around technical SEO: metadata generated per post, structured data injected at the layout level, a strict keyword template, and an internal linking system that connects every article to its neighbors.

This post is the honest version of what worked and what did not. It is not a generic SEO checklist copied from a marketing blog. It is the specific set of engineering decisions, in a Next dot js App Router codebase with next-intl for English and Indonesian, that turned a list of drafts into a site that ranks for long-tail engineering searches. I will walk through keyword strategy, the metadata layer, structured data, internal linking, and the metrics that actually mattered once real traffic showed up.

Long-tail keywords beat broad ones for a solo engineering blog

A brand new domain has no authority to compete for a broad term like devops or backend development. Those searches are dominated by sites with years of backlinks and huge content libraries. The realistic opportunity for an individual engineering blog is long-tail search, specific multi-word phrases with lower volume but far less competition and much higher intent. Someone searching for how to configure prometheus recording rules to reduce cardinality is closer to becoming a reader, or a client, than someone searching devops.

  • Pick titles that name the exact tool, error, or workflow, not just the general category, so the title matches what a person actually typed into the search box.
  • Write the primary keyword into the title, the meta description, and the first two paragraphs of the article, because that is where both readers and crawlers look first.
  • Treat every keyword list as a template with twelve to fifteen long-tail phrases ending in your own name, so branded searches and topical searches both lead back to the same author identity.

Before writing a single paragraph, write the meta title and meta description first. If you cannot compress the article into a keyword-first title under sixty three characters and a description under one hundred fifty five characters, the topic is probably still too broad.

Metadata and structured data are the technical foundation, not an afterthought

In a Next dot js App Router project, per-post SEO belongs in one place, a shared layout that every post inherits from, so nothing is duplicated across dozens of article components. The layout exports a generateMetadata function that reads a small metadata object per slug and returns the title, description, keywords, canonical URL, language alternates, and Open Graph fields for that exact post. Because generateMetadata runs on the server before the page renders, the resulting tags are already present in the initial HTML that search engines see, rather than being injected later by client-side JavaScript.

The same layout also renders JSON-LD structured data, a TechArticle or Article schema with author, publisher, and publish date, a BreadcrumbList schema so search engines understand the site hierarchy, and an FAQPage schema built from five question and answer pairs per post. Centralizing this in one layout file means adding a new blog post never means writing SEO code again, it means filling in data that an existing system already knows how to render.

export async function generateMetadata(
  { params }: { params: Promise<{ slug: string }> }
): Promise<Metadata> {
  const { slug } = await params;
  const meta = BLOG_META[slug];

  return {
    title: meta.title,
    description: meta.description,
    keywords: meta.keywords,
    alternates: {
      canonical: buildCanonical(slug),
      languages: buildLanguageAlternates(slug),
    },
    openGraph: {
      type: "article",
      title: meta.title,
      description: meta.description,
      images: [meta.image],
    },
  };
}

A repeatable process beats a one-off SEO push

SEO work that happens once and then gets forgotten decays fast. The only approach that compounds is a process every new post goes through automatically, so quality does not depend on remembering to do it manually each time. Here is the sequence that turned into a habit:

  1. Research the long-tail keyword and competing pages first, before writing the outline, so the article is built around a real search query instead of a topic that merely sounds interesting.
  2. Draft the title, meta description, and twelve to fifteen keyword phrases before the article body, and verify the character counts with a simple word count command rather than eyeballing it.
  3. Write five FAQ question and answer pairs that mirror how real people phrase questions, what, why, how, can I, since these double as both structured data and natural subheadings readers scan for.
  4. Add the new post to the category and related-posts system so it links to, and is linked from, other articles in the same topic area, instead of existing as an isolated page with zero internal links pointing to it.

Do not fabricate source links to make an article look well researched. A broken or invented citation is worse for trust and for search engines than no citation at all. Verify every external URL actually resolves before publishing, and prefer official documentation or Wikipedia over blog posts that move their URLs frequently.

What actually moved the needle, ranked by effort versus impact

Not every SEO tactic pays off equally. After several months of publishing, a rough pattern emerged across the tactics I tried, comparing the setup effort against the traffic impact once Google had fully indexed and re-crawled the site.

TacticSetup effortTraffic impact
Long-tail, keyword-first titlesLowHigh, the single biggest lever
TechArticle and FAQPage structured dataMedium, one-time layout buildMedium, helps understanding and eligibility for rich answers
Internal linking between related postsLow per post, ongoingMedium to high, compounds as the catalog grows

Internal linking turns isolated posts into a network

A single well-optimized post can rank, but a network of posts that link to each other with descriptive anchor text ranks more reliably, because it signals which pages the site itself considers most important and related. Google's own guidance on crawlable links states that every page you care about should have a link from at least one other page on the site, and that anchor text should be descriptive rather than a generic click here.

  • Every blog post layout automatically renders a related-posts block, server-rendered with no client-side JavaScript, drawing from other posts in the same category.
  • Anchor text inside article bodies names the actual tool or concept being linked to, for example a specific package name or configuration option, instead of vague phrases.
  • Category pages act as topic hubs, so a reader arriving at any single Backend or DevOps post can browse sideways into the rest of that topic cluster without leaving the site.

The related-posts block alone, once enough posts existed in the same category to populate it meaningfully, measurably increased average pages per session, which is one of the clearest engagement signals a small site can influence directly.

The metrics that mattered, and the ones that were noise

Total pageviews felt satisfying to watch but told me almost nothing useful on their own. The metrics that actually explained what was working were: which exact queries in Search Console were driving impressions and clicks, which pages had high impressions but low click-through rate, meaning the title or description was not compelling enough for the ranking position, and which posts were gaining position over consecutive weeks after being freshly re-linked from a new article.

One thing worth being honest about, structured data itself is a moving target. Google has deprecated the FAQ rich result visual treatment in search results as of 2026, even though the underlying FAQPage schema remains valid structured data and is still worth including for other search engines and AI answer engines that do consume it. The lesson generalizes, build your SEO system around fundamentals that outlast any single rich-result feature, specifically keyword-matched titles, fast and correctly rendered metadata, and a genuinely interlinked site.

FAQ

Frequently Asked Questions

Short answers to what readers ask most about this topic.

What SEO strategy actually grows an engineering blog?

Long-tail, keyword-first titles matter more than broad topic titles for a new engineering blog, because broad terms are already dominated by large established sites. Pairing specific titles with server-rendered metadata, structured data, and internal linking between related posts is what produced consistent, compounding traffic growth rather than a single spike.

Why do long-tail keywords work better than broad keywords for a developer blog?

A new domain has little authority to compete for high-volume broad terms like devops or backend development. Long-tail phrases, specific multi-word queries that name the exact tool, error, or workflow, have lower search volume but much less competition and higher intent, so a solo blog can realistically rank for them.

How should structured data be implemented in a Next.js blog?

Centralize it in one shared layout file that every blog post inherits from, rather than duplicating JSON-LD in every article component. That layout can export a generateMetadata function for titles, descriptions, and canonical URLs, plus render TechArticle, BreadcrumbList, and FAQPage JSON-LD from per-post data, so adding a new post never requires writing new SEO code.

Can internal linking alone improve a blog's search rankings?

Internal linking will not make a poor article rank, but it meaningfully strengthens a good one. Google's own guidance states every page you care about should have a link from at least one other page on the site, and a related-posts system with descriptive anchor text measurably increases pages per session as a catalog of articles grows.

Is FAQ structured data still worth adding to blog posts in 2026?

Google removed the visual FAQ rich result treatment from search results in 2026, but the underlying FAQPage schema is still valid structured data and remains useful for other search engines and AI answer engines that consume it. Building SEO around durable fundamentals, like keyword-matched titles and genuine internal linking, matters more than any single rich-result feature.