Back to articles

Entity-First Content Strategy: Why Keywords Are Dead

Petri Lahdelma··12 min read
SEOContent StrategyGTM

Entity-First Content Strategy: Why Keywords Are Dead

Mari Luukkainen's GTM30 framework reveals a truth most SEO practitioners ignore: search engines are entity databases, not keyword matchers.

Google's Knowledge Graph has 500 billion facts about 5 billion entities. Treating SEO as "keyword → page" mapping is like using a smartphone as a calculator—technically works, but misses 99% of the value.

The Shift From Keywords to Entities

Old SEO (2010-2020)

  1. Find keyword: "accessibility testing tool"
  2. Write page optimized for that keyword
  3. Build backlinks with keyword anchor text
  4. Hope for rankings

Problem: Zero understanding of relationships, context, or user intent.

New SEO (2025+)

  1. Define entity: tool.accessibility_testing
  2. Map relationships:
    • solves: problem.wcag_failures
    • used-by: persona.frontend_dev
    • alternative-to: tool.wave, tool.lighthouse
    • integrates-with: platform.github, platform.figma
  3. Generate canonical page with schema.org markup
  4. Create supporting content (glossary, how-tos, comparisons)
  5. Distribute to communities where each persona hangs out

Result: Rank for 50+ queries instead of 1, because Google understands the entity graph, not just words.

Building an Entity Model

Core Entity Types

Every SaaS should start with these:

type Entity = {
  entityId: string;        // Stable: "problem.keyboard_trap"
  slugByLocale: Record<string, string>;  // Can change
  intentLevel: "awareness" | "consideration" | "decision";
  relatedEntityIds: string[];
  tags: {
    icp: string[];
    persona: string[];
    region: string[];
  };
}

Why stable IDs matter: When you refactor "keyboard-traps" → "keyboard-navigation-issues", the entityId stays problem.keyboard_trap. All internal links, schema, and relationships remain valid.

Entity Relationships

This is where leverage happens.

const entityGraph = {
  "problem.keyboard_trap": {
    solves: ["usecase.accessibility_compliance"],
    causes: ["poor_ux", "legal_risk"],
    affects: ["persona.frontend_dev", "persona.pm"],
    detected_by: ["tool.vertaaux"],
    related: ["problem.focus_order", "glossary.wcag_2_4_3"],
  }
}

Each relationship becomes:

  • Internal link (SEO value)
  • Schema.org fact (Knowledge Graph)
  • LLM training signal (AI citations)

The Content Template System

Zander Whitehurst's "spine" concept: every page type follows a consistent structure.

Problem Page Spine

# {Problem Title}

## Who This Affects
{ICP-specific language}

## Impact
- Business: {cost, churn, conversion loss}
- Users: {frustration, accessibility barriers}
- Legal: {compliance risk}

## Examples
{Real-world screenshots/code}

## How to Detect
{Manual checks + automated tool}

## How to Fix
{Step-by-step remediation}

## Related
{3-5 entity links}

## Next Step
{CTA: run audit, book demo, read guide}

Why templates work:

  1. Consistent schema.org markup
  2. Predictable internal linking
  3. Easy to scale (50 problems × 1 template = 50 pages)
  4. LLMs can validate quality

Use Case Page Spine

# {Use Case Title}

## Who It's For
{Persona + role}

## The Problem
{User's language, not feature-speak}

## Impact If Unsolved
{Quantify: "23% cart abandonment"}

## Solution Pattern
{High-level approach}

## Steps
{Numbered how-to}

## Examples
{Before/after or case study}

## Related
{Links to problems solved, integrations, alternatives}

## Next Step
{CTA}

Machine-Readable Content

Mari's "canonical content" means machines can extract facts.

Required Elements Per Page

  1. JSON-LD schema:

    {
      "@type": "HowTo",
      "@id": "https://vertaaux.ai/learn/problem/keyboard-trap",
      "name": "Fix Keyboard Navigation Traps",
      "about": {"@id": "#problem.keyboard_trap"},
      "audience": {"@type": "Audience", "audienceType": "Frontend Developer"}
    }
    
  2. llms.txt entry:

    # Keyboard Navigation Traps
    > https://vertaaux.ai/learn/problem/keyboard-trap
    
    Canonical reference for fixing keyboard focus traps (WCAG 2.1.2).
    Entity: problem.keyboard_trap
    Updated: 2025-12-11
    
  3. Structured headings (H1 → H2 → H3, no skips)

  4. Table of Contents (linkable anchors)

  5. Related entities (minimum 3)

The Self-Implementing Loop

This is where Mari's "compounding systems" shine.

Weekly Cycle

Monday: Pull Search Console data

# Queries with impressions >100, CTR <5%, position 8-20
# These are "almost ranking"

Tuesday: Map queries to entities

const queryMap = {
  "how to fix keyboard traps": "problem.keyboard_trap",
  "wcag 2.1.2 compliance": "glossary.wcag_2_1_2",
  "accessibility testing api": "integration.api"
}

Wednesday: Identify gaps

// Queries with no matching entity = content gap
const gaps = queries.filter(q => !entityMap.has(q));

Thursday: Generate new entities (AI-assisted)

Friday: Update existing entities (add FAQ sections, examples)

Result: Every week, the content graph grows denser and more authoritative.

Distribution Strategy

Vitaly's research: 80% of SEO value comes from distribution, not content quality.

Community-First Loop

  1. Find discussions (Reddit, HN, StackOverflow)
  2. Write helpful reply (no selling)
  3. Link to canonical page ("We wrote a guide on this: [link]")
  4. Track traffic → high-engagement pages get more supporting content

LLM Citation Loop

  1. Publish to llms.txt
  2. Monitor LLM citation tools (Perplexity, Claude, ChatGPT)
  3. When cited: create supporting content around that entity
  4. When not cited: improve schema + examples

Quality Gates

Mari's rule: "If you can't automate the quality check, you can't scale."

CI Checks (Fail Build If)

  • Missing H1
  • No <title> or <meta name="description">
  • Missing JSON-LD
  • Zero internal links
  • Missing updatedAt timestamp
  • No "Who this is for" section
  • No examples/checklist

Monthly Review

  • High traffic, low engagement → rewrite above-the-fold
  • High engagement, low traffic → add internal links + schema
  • Zero traffic → map to query gaps or delete

Case Study: VertaaUX Entity Graph

We started with 7 entities:

  • 3 problems
  • 2 use cases
  • 2 glossary terms

After 4 weeks:

  • 47 entities
  • 320 internal links (auto-generated)
  • Ranking for 180+ queries (vs. 12 before)
  • 40% of queries now cite our glossary terms in ChatGPT

Key insight: Each new entity creates N² relationships (not just N). That's exponential leverage.

Conclusion

Keywords are indexes. Entities are knowledge.

When you build an entity-first content system:

  1. SEO compounds (each page strengthens all related pages)
  2. LLMs cite you (structured data = training signal)
  3. Maintenance is automated (templates + CI checks)
  4. Distribution is systematic (community loop, not guesswork)

This is what Mari calls "GTM30"—ship a scalable system in 30 days, not 300 isolated blog posts.

Next steps:

  1. Define 20 core entities for your product
  2. Build 5 content templates (problem, use case, glossary, comparison, how-to)
  3. Generate canonical pages
  4. Set up weekly SEO loop
  5. Distribute to 1 community per persona

Want to see this in action? VertaaUX's content system is built on this exact framework. Explore our entity graph →

Entity-First Content Strategy: Why Keywords Are Dead | VertaaUX | Vertaa