Skip to content

fix(hl): don't emit /hyperliquid/<slug> links for builders without history - #978

Merged
Flotapponnier merged 1 commit into
devfrom
fix/hl-dormant-builders-404
Jul 8, 2026
Merged

fix(hl): don't emit /hyperliquid/<slug> links for builders without history#978
Flotapponnier merged 1 commit into
devfrom
fix/hl-dormant-builders-404

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

Problem

Ahrefs surfaced 14 /hyperliquid/<slug> URLs returning 404 on our own domain with inlinks from our own pages:

supurr, nautilus-trader, superstack, unigox, slash, liquid8,
aura-money, superx, vibeliquid, blink, xtrade-protocol, kinto,
ranger-finance, topdog

12 of them: inlinked from /products/<slug> which does a 301 to /hyperliquid/<slug>.
2 of them (aura-money, nautilus-trader): inlinked from the /hyperliquid cohort leaderboard.

Root cause

  • isHlBuilderSlug(slug) returns true whenever the slug is in hyperliquid-frontends.yml providers (spec-level).
  • /hyperliquid/[slug]/page.tsx notFound()s when the same slug is NOT in fetchHlHistory().frontends (12-month rolling blob).
  • Some builders are in the spec but not in the history blob (dormant, new, paused, or below the history threshold).

Fix

  1. New isHlBuilderWithHistory(slug) checks BOTH spec + history blob.
  2. /products/[slug] uses the new check → dormant HL builder slugs now render the normal provider profile instead of 301-ing to a 404.
  3. hl-cohort-leaderboard renders a plain <span> (not <Link>) on rows without history. Row still shows KPI + '—' for trend.

Test plan

  • pnpm typecheck clean
  • Staging: /products/supurr renders 200 (not 301 to 404)
  • Staging: /hyperliquid hub cohort table shows aura-money without a broken link
  • Ahrefs re-crawl: 14 → 0 broken /hyperliquid/ URLs

…story

Ahrefs surfaced 14 /hyperliquid/<slug> URLs returning 404 on our own
domain (supurr, nautilus-trader, superstack, unigox, slash, liquid8,
aura-money, superx, vibeliquid, blink, xtrade-protocol, kinto,
ranger-finance, topdog). Root cause:

  1. isHlBuilderSlug() returns true whenever the slug appears in
     hyperliquid-frontends.yml providers (spec-level).
  2. /hyperliquid/<slug>/page.tsx notFound()s when the same slug is
     NOT in fetchHlHistory().frontends (12-month rolling blob).
  3. Some builders are in the spec but not in history (dormant, new,
     paused, or just below the history-blob activity threshold).

Two inlink sources produced the 404 chain:

  a) /products/<slug> checked isHlBuilderSlug() before redirecting
     to /hyperliquid/<slug>, sending 12 crawler paths into a 404.
  b) /hyperliquid hub cohort leaderboard rendered a link to
     /hyperliquid/<slug> for every cohort row, even the 2 rows
     (aura-money, nautilus-trader) with no 12m history.

Fixes:

  - New isHlBuilderWithHistory(slug) checks BOTH the spec AND the
    history blob. Wired into products/[slug]/page.tsx replacing the
    older check, so /products/<dormant-builder> now renders the
    normal provider profile instead of redirecting to a 404.
  - hl-cohort-leaderboard swaps <Link> for a plain <span> on rows
    where the history map has no entry. The row still shows all
    KPI data + '—' for the trend column; just no crawl path into
    /hyperliquid/<slug> 404s.
@Flotapponnier
Flotapponnier merged commit 78a8ea3 into dev Jul 8, 2026
1 check passed
Flotapponnier added a commit that referenced this pull request Jul 8, 2026
…story (#978) (#979)

Ahrefs surfaced 14 /hyperliquid/<slug> URLs returning 404 on our own
domain (supurr, nautilus-trader, superstack, unigox, slash, liquid8,
aura-money, superx, vibeliquid, blink, xtrade-protocol, kinto,
ranger-finance, topdog). Root cause:

  1. isHlBuilderSlug() returns true whenever the slug appears in
     hyperliquid-frontends.yml providers (spec-level).
  2. /hyperliquid/<slug>/page.tsx notFound()s when the same slug is
     NOT in fetchHlHistory().frontends (12-month rolling blob).
  3. Some builders are in the spec but not in history (dormant, new,
     paused, or just below the history-blob activity threshold).

Two inlink sources produced the 404 chain:

  a) /products/<slug> checked isHlBuilderSlug() before redirecting
     to /hyperliquid/<slug>, sending 12 crawler paths into a 404.
  b) /hyperliquid hub cohort leaderboard rendered a link to
     /hyperliquid/<slug> for every cohort row, even the 2 rows
     (aura-money, nautilus-trader) with no 12m history.

Fixes:

  - New isHlBuilderWithHistory(slug) checks BOTH the spec AND the
    history blob. Wired into products/[slug]/page.tsx replacing the
    older check, so /products/<dormant-builder> now renders the
    normal provider profile instead of redirecting to a 404.
  - hl-cohort-leaderboard swaps <Link> for a plain <span> on rows
    where the history map has no entry. The row still shows all
    KPI data + '—' for the trend column; just no crawl path into
    /hyperliquid/<slug> 404s.

Co-authored-by: Florent Tapponnier <contact@mobula.io>
@Flotapponnier
Flotapponnier deleted the fix/hl-dormant-builders-404 branch July 17, 2026 14:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant