Back openDesk Edu for a sovereign, open-source education — every vote counts.
Vote nowSave products you love by clicking the heart icon.
A self-hosted GitHub Actions runner reports online with the right labels, yet your queued run never gets picked up. The real culprit is usually not the runner at all — it's a GitHub-side job that never got materialized. How to diagnose the ghost queue and make your deploys re-triggerable.
The warning showed up as a slow, quiet drain: a few pages accrued some
traffic, Google indexed them, and AdSense served ads against articles that
nobody should have been reading in the first place. They were thin — a few
hundred words, near-duplicate of a stronger sibling — and they were
consuming crawl budget and index slots out of proportion to their worth. The
knee-jerk fix is to delete them. The better fix is noindex: keep them
reachable, take them out of the index, and build a gate so it never
silently happens again.
This is how we turned noindex from a page-level flag into an operational
lever.
noindex is what makes this strategy non-destructive. The page stays up —
it returns 200, it is reachable by anyone with the URL and by internal
links. It is simply removed from the index. That means the decision is
reversible: if a page later earns its keep (you expand it past the
threshold), you delete the noindex flag and it re-enters the index. You
lose nothing, and you never have to restore deleted content.
Deleting is final and hides the page from every referring link. noindex
turns the whole thing into a lightweight, auditable toggle you can flip
per-page.
The failure mode of "thin content" rules is ambiguity — someone has to judge each page. A gate replaces judgment with a number, and numbers can be enforced in CI. Our rule: a content file that comes in under a hard minimum word count is a candidate for noindex, and one under a softer warning count needs attention before it grows.
MIN_WORDS = 220 # below this: hard-fail unless already noindexed
WARN_WORDS = 350 # below this: warn that the page is thin
The distinction matters:
noindex: true.For the genuinely hopeless leaves we applied noindex directly in the
frontmatter and kept them online:
---
title: "..."
noindex: true
A blanket word-count gate will false-positive on pages that are supposed
to be short but are nonetheless index-worthy: landing pages, product pages,
cheatsheets, and category indexes. Exclude those classes explicitly rather
than tuning the threshold down until they pass. In our case the exclusions
were /cheatsheets/, /products/, /store/, and a showcase — all of which
are structurally concise but legitimate.
The crawl-pollution problem is an index problem. Google spends crawl budget
and index slots on pages that don't deserve them; that dilutes the attention
your good pages get and, on AdSense sites, lets low-quality pages earn from
impressions they don't merit. noindex removes exactly the units of the
problem — index entries — without touching the real things (the pages).
And because the gate runs in CI, the next thin page gets caught at commit time, not months later in a Metrics dashboard. The gate is the difference between a one-off cleanup and a permanent rule.
The pages we flipped still load, still link, still count in sitemaps — they
just stopped polluting the index. noindex, enforced with a threshold and a
CI gate, is the rare SEO lever that is both reversible and automatic.