Skip to main content

VertaaUX Articles

Entity-First Content Strategy: Why Keywords Are Dead

Modern search engines understand entities and relationships, not just keywords. Here's how to build content systems that rank in 2025 and beyond.

Petri Lahdelma12 min read12 min remaining

Last updated December 11, 2025

SEOContent StrategyGTM
Run This On Your SiteListen: Unavailable

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:

Code
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.

Code
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

MARKDOWN
# {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

MARKDOWN
# {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:

    JSON
    {
      "@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:

    Code
    # 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

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

Tuesday: Map queries to entities

Code
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

Code
// 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 →

Audit your page now

Apply this article on a live URL and get an actionable report in minutes.

Improve this article

Found an error, outdated section, or gap? Send feedback and we will update the changelog.

Was this useful?

Quick signal helps us prioritize article updates.