Skip to content

Content Gap Analysis Workflow

Fresh

End-to-end workflow for identifying and filling content gaps using vector embeddings and competitive analysis.

Overview

This workflow uses vector embeddings to semantically compare your content against competitors, identifying topics they cover that you don't.

Prerequisites

  • [ ] ChatGPT Plus or API access
  • [ ] Google Colab account
  • [ ] OpenAI API key
  • [ ] Screaming Frog license
  • [ ] Ahrefs/SEMrush access (for traffic estimates)

Phase 1: Competitor Selection

Objective: Choose the right competitors for comparison

Step 1.1: Identify True Competitors

Not just business competitors - content competitors:

  • Sites ranking for your target keywords
  • Industry publications
  • Resource sites in your niche

Step 1.2: Scope the Comparison

ScopeWhen to Use
Full siteSmall sites (<1000 pages)
Section onlyLarge sites (compare /blog to /blog)
Topic clusterFocused analysis

Phase 2: Data Collection

Objective: Gather URLs and content from both sites

Step 2.1: Crawl Your Site

Using Screaming Frog:

  1. Configure to extract page content
  2. Enable custom extraction for embeddings
  3. Export: URL, Title, Content, Embeddings

Step 2.2: Crawl Competitor

Same process for competitor site. Alternatively, use Colab to crawl directly.

Step 2.3: Data Format

Prepare CSVs:

your_site.csv:

URLTitleEmbeddings
/page1Title 1[0.123, ...]

competitor.csv:

URLTitleEmbeddings
/page-aTitle A[0.456, ...]

Phase 3: Embedding Comparison

Objective: Find semantic gaps using vector similarity

Step 3.1: Generate Comparison Code

Use ChatGPT with this prompt:

I need Python code for Google Colab.

I have two CSVs:
- my_site.csv with columns: URL, Title, Embeddings
- competitor.csv with columns: URL, Title, Embeddings

For each competitor URL, find the best matching URL on my site using cosine similarity.

Output a CSV with:
- Competitor URL
- Competitor Title
- Best Match URL (my site)
- Best Match Title (my site)
- Similarity Score

Sort by similarity score ascending (lowest first = biggest gaps).

Step 3.2: Run Analysis

  1. Upload both CSVs to Colab
  2. Run the generated code
  3. Download results

Step 3.3: Interpret Results

Score RangeMeaningAction
0.00 - 0.25No matching contentHigh priority gap
0.25 - 0.40Weak coverageConsider new content
0.40 - 0.60Partial coverageEnhance existing
0.60+Good coverageLow priority

Phase 4: Gap Prioritization

Objective: Focus on highest-value opportunities

Step 4.1: Add Traffic Data

Enrich gap list with:

  • Competitor page traffic (Ahrefs/SEMrush)
  • Keywords the page ranks for
  • Backlink count

Step 4.2: Scoring Matrix

Step 4.3: Final Priority List

Create prioritized list:

  1. High traffic + Big gap = Immediate priority
  2. High traffic + Small gap = Enhance existing
  3. Low traffic + Big gap = Secondary priority
  4. Low traffic + Small gap = Backlog

Phase 5: Content Planning

Objective: Turn gaps into actionable content plans

Step 5.1: Content Brief Creation

For each priority gap:

  • Target keywords
  • Search intent
  • Content format (guide, tool, comparison)
  • Word count estimate
  • Internal linking opportunities

Step 5.2: Cluster Gaps

Group related gaps into topic clusters:

  • Create pillar page for cluster
  • Plan supporting content
  • Map internal link structure

Phase 6: Implementation

Objective: Create content and integrate with existing site

Step 6.1: Content Creation

Follow your content creation process, ensuring:

  • Unique angle (not just copying competitor)
  • Better depth or freshness
  • Proper E-E-A-T signals

Step 6.2: Internal Linking

Using Internal Linking SOP:

  • Link from existing high-authority pages
  • Add new pages to navigation
  • Update related content to reference new pages

Step 6.3: Submission

  • Add to XML sitemap
  • Request indexing in Search Console
  • Share on social/email for initial signals

Verification Checklist

  • [ ] Competitors selected and scoped
  • [ ] Both sites crawled with embeddings
  • [ ] Comparison analysis complete
  • [ ] Gaps prioritized by value
  • [ ] Content briefs created
  • [ ] Internal linking planned
  • [ ] Implementation timeline set

Troubleshooting

Embeddings not matching well

  • Check you're using the same embedding model for both sites
  • Ensure content (not just titles) is included

Too many gaps identified

  • Narrow scope to specific sections
  • Increase similarity threshold
  • Filter by traffic potential

Competitor has thin content

  • Focus on their high-traffic pages only
  • Consider multiple competitors

Knowledge extracted from Search 'n Stuff Conference talks