DEV Community

Cover image for PostgreSQL.org and Docker.com Self-Redirect Every Tracked Link. Svelte and Angular Don't.
Hermis
Hermis

Posted on

PostgreSQL.org and Docker.com Self-Redirect Every Tracked Link. Svelte and Angular Don't.

Latest round of the site-crawl series: ran the free RankForge crawler against angular.io, svelte.dev, postgresql.org, and docker.com — 10 pages each, starting from the homepage. Prior installments (python.org, rust-lang.org, redis.io, go.dev, nginx.org, gitlab.com, typescriptlang.org) mostly showed the same-URL self-redirect pattern to some degree on every site. This round is the first with a clean split: two sites self-redirect on literally every tracked link, two don't self-redirect at all.

What I ran

No account needed, so this is reproducible:

  • POST https://rankforge.cc/api/analyzer with {"seed_url": "..."}, then poll GET /api/analyzer/<id> until status is completed.
  • The crawler follows internal links breadth-first from the seed, caps at 10 pages for the anonymous tier, audits every internal redirect to its final destination, and classifies every outbound external link as followed or nofollowed.
  • Raw JSON for all four runs: content/analyzer_20260929_<host>.json.

postgresql.org and docker.com: 18 of 18, every one a self-redirect

  • postgresql.org: 9 of 9 tracked redirects resolve to the identical URL that was linked — /community, /download, /about, /support, /developer, /support/versioning, /docs/online-resources, /docs/faq, /download/snapshots. The top one (/community) has 10 internal inbound links, all pointing at a URL that 301s to itself.
  • docker.com: 9 of 9 — /blog (10 inbound links) plus 8 individual blog-post URLs, every single one a self-redirecting 301.

That's every tracked redirect on both sites landing on the exact URL that was linked — not a partial pattern this time, a complete one.

svelte.dev: 6 real redirects, zero self-redirects

svelte.dev broke the streak going the other direction. All 6 tracked redirects are genuine destination changes: /docs/svelte → /docs/svelte/overview, /tutorial → /tutorial/svelte/welcome-to-svelte, /docs/kit → /docs/kit/introduction, /docs/ai → /docs/ai/overview, /docs/cli → /docs/cli/overview, /playground → /playground/hello-world?show=input. Every one is a 307 (or 301 for playground) that actually moves the visitor somewhere new — canonical-section landing pages, not a self-referencing loop.

angular.io: the whole site has already moved

angular.io doesn't self-redirect either, but for a different reason: curl -I https://angular.io returns a 302 straight to v17.angular.io — Angular's old versioned-docs subdomain — while the crawl's actual top pages all live under angular.dev (angular.dev/ai, angular.dev/ai/develop-with-ai, angular.dev/). The current docs have fully moved domains; per-page redirect auditing came back available: false because the whole site sits behind one domain-level jump rather than a set of individually redirecting internal links. Structurally this is the same underlying issue the self-redirect pattern points at — links that don't lead where you'd expect — just surfacing as a domain migration instead of a same-URL loop.

The 0%-nofollow streak finally breaks

Every site in this series so far had total_nofollowed_external come back 0. Not this round: postgresql.org nofollows 7 of 39 external links (18%), and docker.com nofollows 56 of 230 (24%) — both real site-wide policies, not crawl noise. angular.io (0 of 298) and svelte.dev (0 of 342) keep the streak going on their own pages. Four installments and twenty-four sites into this series, this is the first time a crawled site has shown any external nofollow usage at all.

Try it on your own site

Same checks (orphan pages, near-orphans, internal authority distribution, redirect-chain hops, external nofollow audit) run in one pass, no signup: rankforge.cc/audit.

Top comments (0)