Ad to landing page auditor
Analyze the message match between your ads and landing pages.
How to use it
- Hit Copy the whole skill.
- Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
ChatGPT: make a Project and paste it into Instructions.
Neither? Paste it at the top of a new chat — it works for that chat. - Describe your job in plain words. The AI follows the skill from there.
npx degit gooseworks-ai/goose-skills/skills/ads/composites/ad-to-landing-page-auditor#main ~/.claude/skills/ad-to-landing-page-auditorFor one project only, change the path to .claude/skills/ad-to-landing-page-auditor.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Show the full text216 lines
Ad-to-Landing Page Auditor
The #1 reason ads get clicks but not conversions: the landing page doesn't deliver on the ad's promise. This skill audits the full click path — from ad copy to landing page experience — and flags every disconnect.
Core principle: A great ad with a mismatched landing page is worse than a mediocre ad with a matched one. Message match is the single biggest conversion lever most startups ignore.
When to Use
- "Why are my ads getting clicks but no conversions?"
- "Audit my ad-to-landing page flow"
- "Check message match on our campaigns"
- "My conversion rate is low — help me figure out why"
- "Review our landing pages for our ad campaigns"
Phase 0: Intake
- Ad copy — For each ad, provide:
- Headline(s)
- Body / description text
- CTA text
- Platform (Google Search / Meta / LinkedIn)
- Landing page URLs — The URL each ad points to
- Conversion goal — What should happen after someone clicks? (Demo / Trial / Purchase / Download)
- Known conversion rates? — Current click → conversion rate per ad/LP (if available)
If the user has a CSV export from their ad platform, parse that instead.
Phase 1: Ad Inventory
Parse the provided ads into:
| Ad ID | Platform | Headline | Body/Description | CTA | Landing Page URL | Conv Rate (if known) |
|---|
Phase 2: Landing Page Audit
For each unique landing page URL, fetch the page content:
fetch_webpage: [landing_page_url]
If fetch_webpage is not available, use curl to retrieve the page HTML.
Extract and score:
2A: Content Elements
| Element | Found? | Content |
|---|---|---|
| Hero headline | [Y/N] | "[Text]" |
| Subheadline | [Y/N] | "[Text]" |
| Primary CTA | [Y/N] | "[Button text]" |
| CTA above fold | [Y/N] | — |
| Social proof | [Y/N] | [Logos / testimonials / metrics] |
| Benefit list | [Y/N] | [Key benefits listed] |
| Form / Sign-up | [Y/N] | [Field count: N] |
| Video | [Y/N] | — |
| Trust signals | [Y/N] | [Security badges, guarantees] |
2B: Message Match Scoring
For each ad → landing page pair, score on:
| Dimension | Score (1-10) | Criteria |
|---|---|---|
| Promise continuity | [X] | Does the LP headline deliver on the ad's promise? |
| Language match | [X] | Does the LP use the same words/phrases as the ad? |
| Visual continuity | [X] | Does the LP feel like a continuation of the ad? (Not assessable for search) |
| CTA alignment | [X] | Does the LP's ask match what the ad implied? |
| Specificity match | [X] | If the ad was specific ("for sales teams"), is the LP specific too? |
| Emotional match | [X] | If the ad used fear/urgency, does the LP carry that forward? |
Message Match Score: [Average/60]
Scoring Guide
| Score | Rating | Meaning |
|---|---|---|
| 50-60 | Excellent | Strong match — LP delivers on every ad promise |
| 40-49 | Good | Minor disconnects but overall coherent |
| 30-39 | Needs work | Noticeable gaps — visitor has to hunt for relevance |
| 20-29 | Poor | Ad and LP feel like different products |
| Below 20 | Critical | Complete mismatch — fix immediately |
Phase 3: Conversion Friction Analysis
Beyond message match, assess landing page conversion friction:
| Friction Type | Check | Status |
|---|---|---|
| Load time | Does the page feel heavy/slow? (Asset count proxy) | [Fast/Slow/Unknown] |
| Form length | How many fields before conversion? | [N fields] — [Appropriate/Too many] |
| CTA clarity | Is there one clear CTA or competing actions? | [Clear/Cluttered] |
| Above-fold conversion | Can someone convert without scrolling? | [Yes/No] |
| Social proof placement | Is proof near the CTA? | [Yes/No] |
| Navigation distraction | Does the LP have full site nav? (Should be minimal) | [Minimal/Full nav] |
| Mobile experience | Any mobile-unfriendly elements? | [Good/Issues] |
Phase 4: Output Format
# Ad-to-Landing Page Audit — [Product/Client] — [DATE]
Ads audited: [N]
Unique landing pages: [N]
Platform(s): [Google / Meta / LinkedIn]
Overall message match: [Score/60] — [Rating]
---
## Executive Summary
[3-4 sentences: Overall finding, biggest disconnect, top recommendation, estimated conversion impact]
---
## Audit Results by Ad → Landing Page Pair
### Ad 1: "[Ad headline excerpt]"
**Platform:** [Google Search / Meta / LinkedIn]
**Ad copy:**
> Headline: "[text]"
> Body: "[text]"
> CTA: "[text]"
**Landing page:** [URL]
> LP headline: "[text]"
> LP subhead: "[text]"
> LP CTA: "[button text]"
**Message Match Score: [X/60] — [Rating]**
| Dimension | Score | Issue |
|-----------|-------|-------|
| Promise continuity | [X/10] | [Specific finding] |
| Language match | [X/10] | [Specific finding] |
| CTA alignment | [X/10] | [Specific finding] |
| Specificity match | [X/10] | [Specific finding] |
| Emotional match | [X/10] | [Specific finding] |
**Disconnect found:** [Specific description of mismatch]
**Recommended fix:** [Specific change to ad or LP]
### Ad 2: ...
---
## Landing Page Friction Report
### [Landing Page URL]
| Friction Point | Status | Impact | Fix |
|---------------|--------|--------|-----|
| [Friction] | [Red/Yellow/Green] | [High/Med/Low] | [Specific fix] |
---
## Priority Fixes
### Critical (Fix This Week)
1. **[Ad/LP pair]:** [Specific mismatch] → [Specific fix]
- Est. conversion impact: [X% improvement]
### Important (Fix This Month)
2. **[Issue]:** [Fix]
### Nice-to-Have
3. **[Issue]:** [Fix]
---
## Rewrite Suggestions
### For [Ad or LP with worst match]:
**Current ad headline:** "[current]"
**Suggested ad headline:** "[rewrite that matches LP]"
OR
**Current LP headline:** "[current]"
**Suggested LP headline:** "[rewrite that matches ad]"
Save to ad-lp-audit-[YYYY-MM-DD].md in the current working directory (or user-specified path).
Cost
| Component | Cost |
|---|---|
| Landing page fetching | Free |
| Analysis | Free (LLM reasoning) |
| Total | Free |
Tools Required
- fetch_webpage or curl — for landing page analysis
- No API keys required
Trigger Phrases
- "Audit my ad-to-landing page match"
- "Why is my conversion rate so low?"
- "Check message match on our campaigns"
- "Do our landing pages match our ads?"
- "Run a CRO audit on our ad funnels"
| 1 | |
| 2 | name ad-to-landing-page-auditor |
| 3 | description > |
| 4 | Analyze the message match between your ads and landing pages. Checks if the promise |
| 5 | in the ad copy carries through to the landing page headline, body, and CTA. Flags |
| 6 | disconnects that kill conversion rates. Works with Google, Meta, and LinkedIn ads. |
| 7 | tags [ads] |
| 8 | |
| 9 | |
| 10 | # Ad-to-Landing Page Auditor |
| 11 | |
| 12 | The #1 reason ads get clicks but not conversions: the landing page doesn't deliver on the ad's promise. This skill audits the full click path — from ad copy to landing page experience — and flags every disconnect. |
| 13 | |
| 14 | **Core principle:** A great ad with a mismatched landing page is worse than a mediocre ad with a matched one. Message match is the single biggest conversion lever most startups ignore. |
| 15 | |
| 16 | ## When to Use |
| 17 | |
| 18 | "Why are my ads getting clicks but no conversions?" |
| 19 | "Audit my ad-to-landing page flow" |
| 20 | "Check message match on our campaigns" |
| 21 | "My conversion rate is low — help me figure out why" |
| 22 | "Review our landing pages for our ad campaigns" |
| 23 | |
| 24 | ## Phase 0: Intake |
| 25 | |
| 26 | **Ad copy** — For each ad, provide: |
| 27 | Headline(s) |
| 28 | Body / description text |
| 29 | CTA text |
| 30 | Platform (Google Search / Meta / LinkedIn) |
| 31 | **Landing page URLs** — The URL each ad points to |
| 32 | **Conversion goal** — What should happen after someone clicks? (Demo / Trial / Purchase / Download) |
| 33 | **Known conversion rates?** — Current click → conversion rate per ad/LP (if available) |
| 34 | |
| 35 | If the user has a CSV export from their ad platform, parse that instead. |
| 36 | |
| 37 | ## Phase 1: Ad Inventory |
| 38 | |
| 39 | Parse the provided ads into: |
| 40 | |
| 41 | | Ad ID | Platform | Headline | Body/Description | CTA | Landing Page URL | Conv Rate (if known) | |
| 42 | |-------|----------|----------|-----------------|-----|-----------------|---------------------| |
| 43 | |
| 44 | ## Phase 2: Landing Page Audit |
| 45 | |
| 46 | For each unique landing page URL, fetch the page content: |
| 47 | |
| 48 | |
| 49 | fetch_webpage: [landing_page_url] |
| 50 | |
| 51 | |
| 52 | If `fetch_webpage` is not available, use `curl` to retrieve the page HTML. |
| 53 | |
| 54 | Extract and score: |
| 55 | |
| 56 | ### 2A: Content Elements |
| 57 | |
| 58 | | Element | Found? | Content | |
| 59 | |---------|--------|---------| |
| 60 | | **Hero headline** | [Y/N] | "[Text]" | |
| 61 | | **Subheadline** | [Y/N] | "[Text]" | |
| 62 | | **Primary CTA** | [Y/N] | "[Button text]" | |
| 63 | | **CTA above fold** | [Y/N] | — | |
| 64 | | **Social proof** | [Y/N] | [Logos / testimonials / metrics] | |
| 65 | | **Benefit list** | [Y/N] | [Key benefits listed] | |
| 66 | | **Form / Sign-up** | [Y/N] | [Field count: N] | |
| 67 | | **Video** | [Y/N] | — | |
| 68 | | **Trust signals** | [Y/N] | [Security badges, guarantees] | |
| 69 | |
| 70 | ### 2B: Message Match Scoring |
| 71 | |
| 72 | For each ad → landing page pair, score on: |
| 73 | |
| 74 | | Dimension | Score (1-10) | Criteria | |
| 75 | |-----------|-------------|----------| |
| 76 | | **Promise continuity** | [X] | Does the LP headline deliver on the ad's promise? | |
| 77 | | **Language match** | [X] | Does the LP use the same words/phrases as the ad? | |
| 78 | | **Visual continuity** | [X] | Does the LP feel like a continuation of the ad? (Not assessable for search) | |
| 79 | | **CTA alignment** | [X] | Does the LP's ask match what the ad implied? | |
| 80 | | **Specificity match** | [X] | If the ad was specific ("for sales teams"), is the LP specific too? | |
| 81 | | **Emotional match** | [X] | If the ad used fear/urgency, does the LP carry that forward? | |
| 82 | |
| 83 | **Message Match Score: [Average/60]** |
| 84 | |
| 85 | ### Scoring Guide |
| 86 | |
| 87 | | Score | Rating | Meaning | |
| 88 | |-------|--------|---------| |
| 89 | | 50-60 | Excellent | Strong match — LP delivers on every ad promise | |
| 90 | | 40-49 | Good | Minor disconnects but overall coherent | |
| 91 | | 30-39 | Needs work | Noticeable gaps — visitor has to hunt for relevance | |
| 92 | | 20-29 | Poor | Ad and LP feel like different products | |
| 93 | | Below 20 | Critical | Complete mismatch — fix immediately | |
| 94 | |
| 95 | ## Phase 3: Conversion Friction Analysis |
| 96 | |
| 97 | Beyond message match, assess landing page conversion friction: |
| 98 | |
| 99 | | Friction Type | Check | Status | |
| 100 | |--------------|-------|--------| |
| 101 | | **Load time** | Does the page feel heavy/slow? (Asset count proxy) | [Fast/Slow/Unknown] | |
| 102 | | **Form length** | How many fields before conversion? | [N fields] — [Appropriate/Too many] | |
| 103 | | **CTA clarity** | Is there one clear CTA or competing actions? | [Clear/Cluttered] | |
| 104 | | **Above-fold conversion** | Can someone convert without scrolling? | [Yes/No] | |
| 105 | | **Social proof placement** | Is proof near the CTA? | [Yes/No] | |
| 106 | | **Navigation distraction** | Does the LP have full site nav? (Should be minimal) | [Minimal/Full nav] | |
| 107 | | **Mobile experience** | Any mobile-unfriendly elements? | [Good/Issues] | |
| 108 | |
| 109 | ## Phase 4: Output Format |
| 110 | |
| 111 | |
| 112 | # Ad-to-Landing Page Audit — [Product/Client] — [DATE] |
| 113 | |
| 114 | Ads audited: [N] |
| 115 | Unique landing pages: [N] |
| 116 | Platform(s): [Google / Meta / LinkedIn] |
| 117 | Overall message match: [Score/60] — [Rating] |
| 118 | |
| 119 | |
| 120 | |
| 121 | ## Executive Summary |
| 122 | |
| 123 | [3-4 sentences: Overall finding, biggest disconnect, top recommendation, estimated conversion impact] |
| 124 | |
| 125 | |
| 126 | |
| 127 | ## Audit Results by Ad → Landing Page Pair |
| 128 | |
| 129 | ### Ad 1: "[Ad headline excerpt]" |
| 130 | **Platform:** [Google Search / Meta / LinkedIn] |
| 131 | **Ad copy:** |
| 132 | > Headline: "[text]" |
| 133 | > Body: "[text]" |
| 134 | > CTA: "[text]" |
| 135 | |
| 136 | **Landing page:** [URL] |
| 137 | > LP headline: "[text]" |
| 138 | > LP subhead: "[text]" |
| 139 | > LP CTA: "[button text]" |
| 140 | |
| 141 | **Message Match Score: [X/60] — [Rating]** |
| 142 | |
| 143 | | Dimension | Score | Issue | |
| 144 | |-----------|-------|-------| |
| 145 | | Promise continuity | [X/10] | [Specific finding] | |
| 146 | | Language match | [X/10] | [Specific finding] | |
| 147 | | CTA alignment | [X/10] | [Specific finding] | |
| 148 | | Specificity match | [X/10] | [Specific finding] | |
| 149 | | Emotional match | [X/10] | [Specific finding] | |
| 150 | |
| 151 | **Disconnect found:** [Specific description of mismatch] |
| 152 | **Recommended fix:** [Specific change to ad or LP] |
| 153 | |
| 154 | ### Ad 2: ... |
| 155 | |
| 156 | |
| 157 | |
| 158 | ## Landing Page Friction Report |
| 159 | |
| 160 | ### [Landing Page URL] |
| 161 | | Friction Point | Status | Impact | Fix | |
| 162 | |---------------|--------|--------|-----| |
| 163 | | [Friction] | [Red/Yellow/Green] | [High/Med/Low] | [Specific fix] | |
| 164 | |
| 165 | |
| 166 | |
| 167 | ## Priority Fixes |
| 168 | |
| 169 | ### Critical (Fix This Week) |
| 170 | 1. **[Ad/LP pair]:** [Specific mismatch] → [Specific fix] |
| 171 | - Est. conversion impact: [X% improvement] |
| 172 | |
| 173 | ### Important (Fix This Month) |
| 174 | 2. **[Issue]:** [Fix] |
| 175 | |
| 176 | ### Nice-to-Have |
| 177 | 3. **[Issue]:** [Fix] |
| 178 | |
| 179 | |
| 180 | |
| 181 | ## Rewrite Suggestions |
| 182 | |
| 183 | ### For [Ad or LP with worst match]: |
| 184 | |
| 185 | **Current ad headline:** "[current]" |
| 186 | **Suggested ad headline:** "[rewrite that matches LP]" |
| 187 | |
| 188 | OR |
| 189 | |
| 190 | **Current LP headline:** "[current]" |
| 191 | **Suggested LP headline:** "[rewrite that matches ad]" |
| 192 | |
| 193 | |
| 194 | Save to `ad-lp-audit-[YYYY-MM-DD].md` in the current working directory (or user-specified path). |
| 195 | |
| 196 | ## Cost |
| 197 | |
| 198 | | Component | Cost | |
| 199 | |-----------|------| |
| 200 | | Landing page fetching | Free | |
| 201 | | Analysis | Free (LLM reasoning) | |
| 202 | | **Total** | **Free** | |
| 203 | |
| 204 | ## Tools Required |
| 205 | |
| 206 | **fetch_webpage** or **curl** — for landing page analysis |
| 207 | No API keys required |
| 208 | |
| 209 | ## Trigger Phrases |
| 210 | |
| 211 | "Audit my ad-to-landing page match" |
| 212 | "Why is my conversion rate so low?" |
| 213 | "Check message match on our campaigns" |
| 214 | "Do our landing pages match our ads?" |
| 215 | "Run a CRO audit on our ad funnels" |
| 216 |