NEWWorld's first AI visibility audit tool for Web3 is live.Run free audit →
PLAYBOOK Content Last reviewed

Build an Ecosystem Directory Page That Captures Long-Tail Queries

The single highest-ROI L2 SEO enable. Arbitrum and Optimism dominate L2 search because they built proper ecosystem directories. Most L2s skip this entirely. This is how to build one.

Time
8-12 hours initial build, automated thereafter
Difficulty
Intermediate
Impact
High

Why this matters

Before state (what bad looks like)

<!-- /ecosystem/ doesn't exist -->
<!-- Or one paragraph mentioning &quot;200+ projects build on us&quot; -->

<!-- Result: missing all long-tail queries like:
- &quot;DeFi on X chain&quot;
- &quot;NFT marketplaces on X&quot;
- &quot;Aave on X&quot;
- &quot;best games on X&quot;
- &quot;wallets that support X&quot;
-->

Step-by-step

Step 1: Inventory all projects in your ecosystem

List every project building on your chain: DeFi protocols, NFT marketplaces, games, infrastructure, wallets, oracles. For each: name, category, URL, logo, brief description, key metric (TVL/volume/users). Aim for 30+ projects minimum to make the directory worthwhile. If you have under 20, focus on per-project pages and skip the categorized index.

Step 2: Build the directory data structure

Use a CMS-friendly format: JSON, YAML or your CMS's collection types. Each project entry has: slug, name, category, description (40-80 words), website URL, logo URL, key metric, last updated date. Store this as structured data your build pipeline reads.

// ecosystem.json
{
  "categories": ["DeFi", "NFT", "Gaming", "Infrastructure", "Wallets"],
  "projects": [
    {
      "slug": "aave",
      "name": "Aave",
      "category": "DeFi",
      "description": "Decentralized lending protocol with $11.2B TVL across 11 chains.",
      "url": "https://aave.com",
      "logo": "/assets/ecosystem/aave.png",
      "tvl_metric": "live:defillama:aave",
      "last_updated": "2026-05-01"
    }
  ]
}

Step 3: Build the /ecosystem/ index page with categorized grid

Page structure: hero with intro and ecosystem stats (X projects, $Y TVL, etc.), category sections with project cards. Each card shows logo, name, description, key metric, link to project page. Mobile-responsive grid (auto-fit minmax pattern works well).

Step 4: Create per-category pages

/ecosystem/defi/, /ecosystem/nft/, /ecosystem/gaming/ etc. Each has 600-1000 words of editorial commentary (what defines the category, top projects, recent trends), filtered project grid, FAQ section. Captures category-specific queries ("DeFi on X", "games on X").

Step 5: Create per-project pages

/ecosystem/aave/ etc. for major projects. 400-600 words per page: project description, why it's on your chain, key metrics, links to project, integration details if relevant. Captures branded queries ("Aave on X") that no other content can.

Step 6: Integrate live data

TVL from DefiLlama API (free, by chain), NFT volume from Reservoir API (free tier), trading volume from CoinGecko API (free). Cache aggressively (1-hour TTL) to avoid API rate limits. Without live data, your directory goes stale and Google demotes.

// Fetch TVL by chain from DefiLlama
async function getDefiTvlByChain(chainSlug) {
  const res = await fetch(`https://api.llama.fi/v2/chains`);
  const chains = await res.json();
  const chain = chains.find(c => c.gecko_id === chainSlug);
  return chain ? chain.tvl : null;
}

// Cache for 1 hour
const cached = await cache.get(`tvl:${chain}`, 3600);

Step 7: Add ItemList and Service schema

Index page: ItemList wrapping Service or Organization entries for each project. Per-category page: ItemList filtered to that category. Per-project page: Service or Organization schema with provider, areaServed and additionalProperty for chain-specific metrics.

{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "name": "DeFi protocols on X chain",
  "numberOfItems": 47,
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "item": {
        "@type": "Service",
        "name": "Aave",
        "url": "https://example.com/ecosystem/aave/"
      }
    }
  ]
}

Step 8: Build a /ecosystem/submit/ flow for new projects

Form-based submission for projects to apply for inclusion. Drives content scale plus signals to Google that your ecosystem is active and growing. Manual review before publish to keep quality high. Auto-confirm via email.

FREE WEB3 AUDIT

See where this playbook applies to your site.

Run a free Crawlux audit before you start the playbook. It tells you which fixes are most urgent.

Free first audit · No signup · 60 seconds · Full PDF report

After state (what good looks like)

<!-- /ecosystem/ - categorized project grid -->
<!-- Categories: DeFi, NFT, Gaming, Infrastructure, Wallets -->
<!-- Each category has its own page: /ecosystem/defi/ -->
<!-- Each project has its own page: /ecosystem/aave/ -->
<!-- Live data from DefiLlama, Reservoir, etc. -->
<!-- ItemList + Service schema -->

<!-- Result: 200+ long-tail queries captured -->
<!-- 4.1x organic traffic lift on directory pages alone (OVR data) -->

How to validate the fix

Common pitfalls

Pitfall

Building with under 20 projects

Thin ecosystem directories signal a thin ecosystem. If you genuinely have under 20 projects, skip the directory and focus on per-project pages instead. Build the index when you have 30+ projects.

Pitfall

Static metrics that go stale

Without live data integration, projects on your directory drift away from reality. TVL changes daily; static numbers get outdated fast. Pull from DefiLlama, Reservoir, CoinGecko APIs and cache.

Pitfall

No per-project pages, just a long index

The index alone captures category traffic. Per-project pages capture branded traffic. Both compound. Skipping per-project pages misses 60% of the traffic opportunity.

Pitfall

Letting submission flow be too restrictive

Manual review prevents spam but if your bar is too high, you miss legit projects. Aim for 80%+ accept rate on legitimate submissions.

Pitfall

Forgetting hreflang for jurisdiction-localized versions

If your chain operates in multiple jurisdictions with different supported projects, build per-jurisdiction directory pages with hreflang. Most L2s don't need this; some do.

If something breaks: rollback

Set /ecosystem/* pages to 410 Gone or noindex. Remove from sitemap. Effect within crawl cycle (1-4 weeks). The ecosystem JSON data stays for future use; you're only removing the public pages.

Run a free Crawlux audit on this fix

Crawlux validates the schema, technical and AEO fixes from this playbook automatically. Free tier on one domain.

Run free audit →

FAQ

Do non-L2 projects need ecosystem directories?

If you have 30+ projects integrating with your protocol or building on your platform, yes. DeFi protocols with 30+ integrators benefit from /integrations/ pages. Wallets supporting 50+ chains benefit from /chains/ directory. The pattern generalizes beyond L2.

How often should I update the directory?

Live metrics refresh hourly via API. Project entries update on submission/removal. Editorial commentary refreshes quarterly. Last Updated date refreshes on every meaningful change.

Can I auto-add every project that integrates with us?

No. Manual review prevents spam, dead projects and misrepresentation. Auto-add scales but creates quality issues that get flagged by Google's helpful content systems. Manual review is the right tax.

How does Crawlux help with ecosystem directories?

Crawlux Technical SEO module checks ecosystem page Core Web Vitals. AI Visibility Audit measures citation rate for ecosystem queries. Token Schema Audit validates ItemList and Service schema implementation.

What if my chain's ecosystem is mostly small projects?

Build the directory anyway if you have 30+. Small projects collectively capture more long-tail traffic than a few big ones in isolation. The Arbitrum playbook works for chains of all sizes.

Related playbooks

Pillar guides

Audit modules

RUN YOUR FIRST AUDIT

Run the playbook against a real audit.

Get a free Crawlux audit report and use it as the baseline for the work in this playbook.

Free first audit · No signup · 60 seconds · Full PDF report

Audit this fix → Free audit