RT Robert Truesdale

Why Useful Traffic Beats Empty Pages on a Niche Site

You know the drill: you’ve built a site. Maybe it’s a small blog, a tool directory, or a personal knowledge base. You’ve written a few posts, set up some pages, and… crickets.

Then you see someone—just one person—spend 12 minutes reading your deep dive on systemd service isolation. Not skimming. Not bouncing. Reading. That’s the signal. Not pageviews. Not backlinks. Not SEO score.

Useful traffic—people who stay, scroll, and act—beats empty pages every time. Empty pages are just digital clutter. Useful traffic means your work lands.

Let’s talk about why that distinction matters in real-world operation, especially for solo operators, sysadmins, and builders who build things that do work in production.

The “Content Graveyard” Trap

I’ve seen it too many times: a 500-page site with 0.3% bounce rate on every page, and zero conversions. Why? Because the pages exist to satisfy a checklist—not a person.

Here’s what that looks like in practice:

  • A blog post titled “10 Tips for Better Bash Scripting” that lists tips but doesn’t show the one thing that actually broke in production last week.
  • A “tool comparison” page listing 30 tools with identical feature columns and no context about when to avoid each one.
  • A documentation page that mirrors the CLI help text—useful to machines, useless to someone whose pipeline just hung at 2 a.m.

These pages look like content. They’re not. They’re placeholders. They’re the IT equivalent of a server running without a workload: technically up, but wasting power and cooling.

Useful traffic doesn’t care about your content calendar. It cares about solving the problem it brought to your door.

What “Useful” Actually Means in Practice

“Useful” isn’t subjective fluff. In operations, useful means:

  • It prevents a known failure mode.

Example: A post titled “Why Your Ansible Playbook Breaks on Alpine Linux (and How to Fix It)” that calls out the musl libc issue, shows the exact error in ansible-playbook -vvv output, and offers a workaround with --user or a custom interpreter_python. That’s useful.

  • It saves time or reduces risk.

Example: A page listing 3 ways to verify a Docker image before pushing it to prod—each with a one-liner command, a sample output, and the one thing each method misses. Not theory. Not hype. Tradeoffs, spelled out.

  • It answers the question after the question.

You search for “how to rotate TLS certs without downtime.” You find a post that not only shows the kubectl rollout restart command, but also explains how to validate the new cert is serving across all pods (with curl --resolve), and what to watch in logs after rollout. That’s useful.

If your content doesn’t pass that litmus test—does it do something for someone who’s already in the zone of frustration?—it’s not useful. It’s noise.

The Maintenance Reality: Empty Pages Are Debt

Here’s what no one tells you: empty pages aren’t free. They’re technical debt with a side of psychological debt.

Every page you publish that doesn’t earn its keep:

  • Dilutes your signal. Search engines (and readers) start treating all your pages as low-signal. One high-value page can lift a small site’s authority—if it’s not buried under 20 “how-to” posts that just rehash the docs.
  • Becomes stale faster. A 2026-era post on “Kubernetes networking basics” becomes outdated when Cilium replaced kube-proxy in 80% of new clusters. You will get emails or GitHub issues pointing out the broken links or wrong defaults. Empty pages rot faster because no one is watching them.
  • Wastes your time. You’ll spend hours tweaking meta descriptions for pages no one reads, while the one post that actually helped someone debug their systemd unit at 3 a.m. gets buried in your RSS feed.

I ran a small site for three years with 127 posts. 112 of them got <50 pageviews. 15 got 500–2,000. One—“Why Your Prometheus Alert for High CPU Is Wrong”—got 12,000 pageviews, 87 comments, and 3 pull requests that improved the example configs. That one post paid for all the other pages. Not because it was trendy. Because it solved a real, recurring pain.

Real Traffic, Real Behavior: What to Measure (and What to Ignore)

Forget “traffic.” Track useful behavior.

| Metric | Why It Matters | How I Watch It | |——–|—————-|—————-| | Time on page > 2 minutes | Indicates deep reading, not accidental clicks | Google Analytics event (not just average time) | | Scroll depth > 80% | Shows they read to the end—where the fix is | Custom GA4 scroll event | | Click-through to related post | They’re following the trail you laid, not bouncing | Internal link tracking in BigQuery | | GitHub issues opened from site | They’re trying your code or config—and failing | UTM tags on repo links + GitHub API |

I track the last one because failure is data. If someone opens an issue saying “This script fails on RHEL 8.6 because jq is v1.5”, that’s not noise—that’s your next post.

What not to track:

  • Pageviews alone. A viral post on “10 AI Tools for DevOps” might get 50,000 views—but 92% bounce, zero saves, zero shares. Useless.
  • “Engagement” as likes or shares. Those correlate poorly with actual problem-solving.
  • Referral traffic from “top domains.” A link from a big tech blog might send 5,000 people who leave in 8 seconds. That’s not traffic. That’s noise.

What I Would Do First (If You’re Starting or Rebuilding)

You don’t need more pages. You need fewer, better ones. Here’s my first move:

  • Audit for “failure signatures.”

Go through your site. For every page, ask:

  • What specific error, hang-up, or surprise does this page prevent?
  • If I were debugging this at 2 a.m., would I want this page?

Kill or rewrite anything where the answer isn’t “yes.”

  • Pick one under-served, high-friction topic.

Examples:

  • “How to recover from a broken dnf update on CentOS Stream”
  • “The one kubectl command I run before every rollout (and why it saved my neck twice)”
  • “Why your Terraform state file grew 200GB overnight”
  • *Write the post as if you’re the one in the fire.*
  • Show the exact error output (no sanitized snippets).
  • Include the wrong first fix you tried (and why it made things worse).
  • Link to the GitHub issue or Stack Overflow where you found the workaround—not the official docs.
  • Add the “what breaks next” section.

Every useful post needs a failure-mode addendum. Example: > “This fix works until you upgrade to OpenSSH 9.4—because Match User now requires AllowAgentForwarding to be explicitly set. If you skip this, your CI runner jobs start failing with ‘Permission denied (publickey).’”

That’s the detail people screenshot and save. That’s what earns you the email three months later: “Your post on X saved my migration.”

Next Steps: Build for the 1%, Not the 100%

Your site isn’t a museum. It’s a toolshelf.

Don’t chase volume. Chase relevance.

  • If you publish one post a quarter that solves a real, recurring pain for people who already know their way around the terminal—but hit a wall—you’ll build trust faster than 50 “top 10” posts.
  • If you add a “what I’d change” section to older posts (with a date stamp), you’ll reduce support emails by 60% or more.
  • If you stop publishing until you can answer “What does this do for someone who’s already stressed?”—your traffic will get quieter, deeper, and more useful.

The goal isn’t more readers. It’s fewer readers who need what you wrote.

Because in operations—like in life—useful traffic isn’t about numbers. It’s about the person who showed up, read your post, and walked away with a working system.

That’s the signal. Everything else is static.