📋 What This Workflow Does:

The Problem It Solves: Imagine someone searches “how to bake chocolate cake” (they want to learn), but Google shows them your cake shop’s pricing page (you want them to buy). That’s a search intent mismatch—the searcher won’t find what they need, they’ll bounce, and you’ll lose potential conversions.

This workflow automatically:

  1. Pulls your top-performing keywords from Google Search Console
  2. Reads the actual content of each page
  3. Uses AI to determine if the page content matches what searchers expect
  4. Sends you a prioritized report of pages that need fixing

🔄 Workflow Explained:

Stage 1: Setup & Data Collection

Node

What It Does

Manual Trigger

Start button—click this to run the workflow manually

⚙️ Setup Configuration

Your settings: website URL, thresholds, email address, business description. Think of it as the workflow’s control panel.

📊 GSC: Fetch Top Keywords

Connects to Google Search Console and pulls keyword data (which queries bring traffic, how many clicks, what pages rank). Uses a regex filter to focus only on main pages (homepage + first-level pages like /services/ or /about/).

Stage 2: Data Processing

Node

What It Does

📋 Process & Filter GSC Data

Cleans up the GSC data: removes low-traffic keywords (below your thresholds), sorts by clicks, and keeps only the top 100 keywords. Adds helpful info like “traffic potential” scores.

Split Keywords for Processing

Takes the list of 100 keywords and breaks them into individual items, so each keyword can be processed one by one.

Batch Keywords (10 at a time)

Groups keywords into batches of 10. This prevents overwhelming the AI and web scraping services with too many requests at once.

Stage 3: Content Analysis Loop

Node

What It Does

Deduplicate Pages

Multiple keywords often point to the same page (e.g., “car insurance” and “auto insurance” both go to your insurance page). This node groups them together so we only scrape each page once—saving time and API costs.

Filter Valid URLs

Safety check: only processes URLs that start with “http”. Filters out any bad data before scraping.

Read URL Content (Jina AI)

Visits each page and extracts the text content in a clean format. If a page fails to load, it retries up to 2 times. Has a 60-second timeout for slow pages.

Prepare AI Analysis Input

Packages everything the AI needs: the page content, the keywords pointing to it, and performance metrics. Trims content to 8,000 characters to keep costs reasonable.

🧠 Claude: Intent Mismatch Analysis

The brain of the operation! Sends the data to Claude AI, which analyzes: (1) What is the searcher looking for? (2) What does this page actually offer? (3) Do they match? Returns structured analysis with severity scores and recommendations.

Parse Claude Analysis

Extracts the AI’s response and converts it to structured data the workflow can use. Handles errors gracefully if the AI response isn’t perfectly formatted.

Loop Back for Next Batch

After processing one batch, this sends the workflow back to process the next batch of 10 keywords. Continues until all keywords are analyzed.

Stage 4: Report Generation

Node

What It Does

Aggregate All Results

Collects all the individual analyses into one big dataset.

📊 Generate Final Report

Crunches the numbers: How many mismatches? What’s the severity breakdown? Which pages need immediate attention? Creates prioritized lists and calculates traffic at risk.

📧 Format HTML Email Report

Creates a beautiful, visual email report with color-coded severity badges, stats cards, and actionable recommendations.

📧 Send Email Report

Delivers the HTML report to your inbox via Gmail.

Stage 5: Data Storage

Node

What It Does

Prepare Sheets Data

Formats the keyword-level data for storage.

Create a Database Page (Notion)

Saves each keyword analysis to your Notion database for tracking over time. Stores: keyword, page URL, clicks, impressions, position, intent classification, page type, and whether a mismatch was detected.


🎯 Understanding the Intent Classifications

Keyword Intent Types

Intent

What They Want

Signal Words

INFORMATIONAL 📚

Learn something

“how to”, “what is”, “why”, “guide”, “tutorial”

TRANSACTIONAL 🛒

Buy/convert now

“buy”, “price”, “order”, “subscribe”, “near me”

COMMERCIAL_INVESTIGATION 🔍

Research before buying

“best”, “review”, “vs”, “compare”, “alternative”

NAVIGATIONAL 🧭

Find a specific page

Brand name, “login”, “official”

Page Types

Page Type

Description

PRODUCT_PAGE

Selling a product or service

PRICING_PAGE

Pricing, plans, packages

BLOG_EDUCATIONAL

How-to guides, tutorials, learning content

COMPARISON_PAGE

Reviews, comparisons, “best of” lists

LANDING_PAGE

Lead capture, signup forms

HOMEPAGE

Main site overview

CATEGORY_PAGE

Product/service category listing

SUPPORT_PAGE

Help docs, FAQs

Mismatch Examples

If Keyword Intent Is…

But Page Type Is…

Problem

INFORMATIONAL

PRODUCT_PAGE

Person wants to learn, but you’re selling → They’ll bounce

TRANSACTIONAL

BLOG_EDUCATIONAL

Person wants to buy, but you’re teaching → Lost sale

COMMERCIAL_INVESTIGATION

HOMEPAGE

Person wants comparisons, but sees brand overview → Not helpful


⚙️ Setup Instructions

Prerequisites

  • n8n instance (self-hosted or cloud)
  • Google Search Console property verified
  • Anthropic API key (for Claude)
  • Gmail account with OAuth2
  • Notion account with database created
  • Jina AI account (free tier works)

Step 1: Import the Workflow

  1. Open n8n → Settings → Import
  2. Upload the JSON file
  3. Save the workflow

Step 2: Configure Credentials

Create these credentials in n8n (Settings → Credentials):

Credential

Used For

Google Search Console OAuth2

Fetching keyword data

Jina AI API

Reading page content

Anthropic API

Claude AI analysis

Gmail OAuth2

Sending email reports

Notion API

Storing results

Step 3: Set Up Notion Database

Create a Notion database with these properties:

Property

Type

Name (Title)

Title (for keyword)

Page URL

URL

Clicks

Number

Impressions

Number

Position

Number

Keyword Intent

Rich Text

Page Type

Rich Text

Mismatch Detected

Rich Text

Step 4: Configure the Workflow

Edit the ⚙️ Setup Configuration node:

{
  "site_url": "<https://yoursite.com/>",
  "date_range_days": 30,
  "min_clicks_threshold": 1,
  "min_impressions_threshold": 10,
  "top_keywords_limit": 100,
  "report_email": "your@email.com",
  "business_context": "Brief description of your business"
}

Update the GSC node regex filter if needed (currently filters for root + first-level pages only).

Update the Notion node with your database ID.

Step 5: Test & Activate

  1. Click “Test Workflow” to run manually
  2. Check for errors
  3. Toggle to “Active” for scheduled runs

💰 Cost Estimates

Service

Cost

Notes

Claude Sonnet 4

~$0.90/run

100 keywords ≈ 300K tokens

Jina AI

Free

1,000 requests/month included

n8n

Varies

Self-hosted free, cloud varies

Total

~$4/month

Weekly runs


🔧 Customization Options

Change the Schedule

Add a Schedule Trigger node connected to Setup Configuration:

  • Cron expression: 0 9 * * 1 = Every Monday at 9 AM

Adjust Thresholds

In Setup Configuration, change:

  • min_clicks_threshold: Minimum clicks to include a keyword
  • min_impressions_threshold: Minimum impressions
  • top_keywords_limit: How many keywords to analyze (max 100 recommended)

Change the GSC Filter

The current regex ^https:\\/\\/yoursite\\.com\\/$|^https:\\/\\/yoursite\\.com\\/[^\\/]+\\/?$ only includes:

  • Homepage
  • First-level pages (e.g., /about/, /services/)

To include deeper pages, modify or remove this filter in the GSC node.


🐛 Troubleshooting

Issue

Solution

GSC returns no data

Check OAuth2 credentials, verify site property exists

Jina timeout errors

Normal for slow pages—the retry will handle most cases

Claude parse errors

Check AI response in execution logs—may need prompt adjustment

Notion not saving

Verify database ID and property names match exactly

Email not sending

Check Gmail OAuth2 credentials, verify “less secure apps” settings


📊 Understanding Your Report

Severity Levels

Level

Score

Meaning

Action

HIGH 🔴

76-100

Critical mismatch, major CVR loss

Fix immediately

MEDIUM 🟠

51-75

Significant opportunity

Plan to address

LOW 🔵

21-50

Minor optimization needed

Nice-to-have

ALIGNED 🟢

0-20

Content matches intent

No action needed

Key Metrics

  • Mismatch Rate: % of keywords with intent mismatches
  • Traffic at Risk: Total clicks going to mismatched pages
  • CVR Opportunity: Estimated conversion rate improvement if fixed

📈 Best Practices

  1. Run weekly to catch new mismatches as rankings change
  2. Focus on HIGH severity first - biggest impact
  3. Track improvements in Notion database over time
  4. Create new content for keywords that don’t have a matching page
  5. Optimize existing pages by adding sections that match searcher intent

📝 Changelog

v1.0.0 - Initial Release

  • GSC data collection with page-level regex filter
  • Jina AI native node with retry logic
  • Claude Sonnet 4 analysis
  • Notion database storage
  • HTML email reports with severity badges
  • Intent classification: 4 types
  • Page type classification: 8 types
  • Severity scoring: 0-100 scale

FULL JSON CODE:

Search_Intent_Mismatch_Detector_Sanitized.json41.99 KB • JSON File