# SaaS keyword map template

> A keyword map structure that survives contact with writers: twelve columns, intent tiers, page assignment, modelled pipeline value and cannibalisation flags.

Source: https://saas-marketing.net/templates/saas-keyword-map-template/
Topic: SaaS SEO
Type: template
Published: 2026-09-11
Last updated: 2026-09-11
Publisher: SaaS Marketing (saas-marketing.net)
License: CC BY 4.0. Quote or republish with attribution and a link to https://saas-marketing.net/templates/saas-keyword-map-template/

## Short answer

A SaaS keyword map is a spreadsheet with one row per keyword and twelve columns: keyword, cluster, intent tier, target URL, page type, current position, volume, modelled pipeline value, priority score, writer, status and a cannibalisation flag. The rule that makes it work is one keyword to exactly one URL. Rows without a target URL are not a plan, they are a wish list, and they should be filtered out of the publishing queue.

## Key takeaways

- One keyword maps to exactly one URL, and one URL owns exactly one primary keyword. Everything else is a research list.
- Modelled pipeline value, not search volume, decides publishing order, because the two orders are close to inverted in SaaS.
- Two COUNTIF formulas turn the sheet self policing: one fires on duplicate target URLs, one on duplicate keywords.
- A row without an owner and a due date will sit untouched for a quarter, so status and writer are required fields.
- Intent tiers beat funnel labels because tiers carry different conversion assumptions you can actually multiply.
- Expect to cut 30 to 50 percent of your original keyword export once every row needs a target URL and a value.

---

Most keyword research dies inside a 400 row export nobody opens twice. The map is the artifact that turns that export into assignments: one keyword, one URL, one owner, one due date. Everything below is the sheet structure, the two formulas that make it police itself, and twenty filled rows for a fictional $15K ACV revenue intelligence product so you can see what a finished row actually looks like.

## The twelve columns, and who fills each one

Twelve columns is the point where the sheet stays readable and still carries enough to plan against. Fewer and you lose the value model. More and people stop updating it.

| # | Column | Type | Filled by | What it is for |
| --- | --- | --- | --- | --- |
| 1 | Keyword | Text | SEO | The exact query, lowercase, no year suffix unless the SERP shows one |
| 2 | Cluster | Dropdown | SEO | The topic group the page belongs to |
| 3 | Intent tier | Dropdown | SEO | T1 buying, T2 evaluating, T3 problem aware, T4 definitional |
| 4 | Target URL | Text | SEO | The single slug that will own this query, live or planned |
| 5 | Page type | Dropdown | SEO | Comparison, alternatives, guide, glossary, integration, use case, tool |
| 6 | Current position | Number | Search Console export | Blank means net new, 8 to 30 means refresh candidate |
| 7 | Volume | Number | Ahrefs or Semrush | Monthly, country specific, no global rollup |
| 8 | Modelled pipeline value | Formula | Sheet | Annual pipeline the row is worth at target position |
| 9 | Priority score | Formula | Sheet | Value divided by effort band |
| 10 | Writer | Dropdown | Editor | A named person, never a team |
| 11 | Status | Dropdown | Editor | Backlog, briefed, drafting, review, published, refresh due |
| 12 | Flag | Formula | Sheet | Fires on a duplicate URL or a duplicate keyword |

Columns 8, 9 and 12 are formulas. Nobody types into them. That matters more than it sounds, because the fastest way to kill a shared sheet is to let three people hand enter a priority number based on vibes.

## Why one keyword maps to exactly one URL

This is the rule the whole template exists to enforce. One keyword owns one URL. One URL owns one primary keyword plus the variants that share its intent.

A comparison page can legitimately hold the plural, the year qualified phrasing and the `vs` reversal, because all three readers want the same page. It cannot also hold the definitional query for the category, because that reader wants a definition and will bounce off a product table. Assigning both to one URL is how you end up with a page that ranks eleventh for two things instead of third for one.

The mechanical payoff is that [keyword cannibalization](/glossary/keyword-cannibalization/) becomes a spreadsheet error rather than a diagnosis you make nine months later from a Search Console query report. When two rows claim the same target URL, the flag fires that day.

Any row with a blank target URL is not planned work. It is a research note. Keep those in a second tab called Backlog and promote a row into the map only when someone can name the slug it will live at. Teams that skip this end up with 300 row maps where 180 rows have never been assigned to anything, and the map stops being trusted.

## The modelled pipeline value formula

Column 8 is the one that changes publishing order. It replaces volume as the sort key.

```
Monthly sessions = Volume × CTR at target position
Monthly signups = Monthly sessions × Visitor-to-signup rate
Monthly opps = Monthly signups × Signup-to-opportunity rate
Annual pipeline = Monthly opps × 12 × ACV
```

For the worked example the inputs are: target position 3 with a 10% CTR on commercial queries and 6% on informational ones after AI Overview compression, ACV $15,000, and conversion rates that differ by intent tier. Those tier rates are the part everyone gets wrong by using a single site wide number.

| Intent tier | Example query shape | Visitor to signup | Signup to opportunity |
| --- | --- | --- | --- |
| T1 buying | `[competitor] alternatives`, `[a] vs [b]` | 5.0% | 30% |
| T2 evaluating | `best [category] software`, `[category] pricing` | 2.0% | 25% |
| T3 problem aware | `sales forecast accuracy benchmark` | 0.6% | 18% |
| T4 definitional | `what is revenue operations` | 0.2% | 12% |

A T1 keyword at 320 searches a month outvalues a T4 keyword at 9,000. Run the arithmetic and the gap is roughly 14x. That single fact is why the sort column matters, and it is the same logic behind building [bottom of funnel SEO for SaaS](/guides/bottom-of-funnel-seo-saas/) pages before anything educational.

## The priority score, and why it is not just value

Value alone pushes every engineering dependent page to the top, and those take three months. Divide by an effort band to get something a team can actually sequence.

```
Priority score = (Annual pipeline value ÷ 1000) ÷ Effort points

Effort points: 1 = writer only, no new assets
 2 = needs SME interview, screenshots or original data
 3 = needs engineering, a data feed or a new template
```

Sort descending on priority, then hand the top fifteen rows to the editor. Anything scoring under 5 goes back to the backlog tab. If you want the traffic side modelled properly before you commit headcount, run the set through the [organic traffic forecast calculator](/calculators/organic-traffic-forecast/) and the [SaaS SEO ROI calculator](/calculators/saas-seo-roi/) rather than trusting the sheet's own straight line.

## Twenty filled rows for a $15K ACV product

The company here sells revenue intelligence to RevOps leaders at Series B to Series D software companies. It competes with Gong on conversation data and with Outreach and Salesloft on workflow. Volumes are plausible planning figures, not lookups.

| Keyword | Tier | Target URL | Page type | Vol | Annual pipeline | Effort | Priority |
| --- | --- | --- | --- | --- | --- | --- | --- |
| gong alternatives | T1 | /alternatives/gong/ | Alternatives | 1,900 | $153,900 | 2 | 77 |
| outreach vs salesloft | T1 | /compare/outreach-vs-salesloft/ | Comparison | 880 | $71,280 | 2 | 36 |
| gong pricing | T1 | /compare/gong-pricing/ | Pricing teardown | 2,400 | $194,400 | 2 | 97 |
| apollo alternatives | T1 | /alternatives/apollo/ | Alternatives | 3,100 | $251,100 | 2 | 126 |
| revenue intelligence software | T2 | /revenue-intelligence-software/ | Category page | 1,300 | $23,400 | 2 | 12 |
| best sales forecasting tools | T2 | /best/sales-forecasting-tools/ | Ranked listicle | 2,900 | $52,200 | 2 | 26 |
| conversation intelligence pricing | T2 | /guides/conversation-intelligence-pricing/ | Pricing explainer | 720 | $12,960 | 1 | 13 |
| revenue operations software | T2 | /revenue-operations-software/ | Category page | 1,600 | $28,800 | 2 | 14 |
| salesforce forecasting limitations | T2 | /guides/salesforce-forecasting-limits/ | Problem page | 260 | $4,680 | 1 | 5 |
| salesforce integration | T1 | /integrations/salesforce/ | Integration | 480 | $38,880 | 3 | 13 |
| hubspot integration | T1 | /integrations/hubspot/ | Integration | 390 | $31,590 | 3 | 11 |
| attio integration | T1 | /integrations/attio/ | Integration | 90 | $7,290 | 3 | 2 |
| sales forecast accuracy benchmark | T3 | /research/forecast-accuracy-benchmarks/ | Research | 590 | $6,884 | 3 | 2 |
| pipeline coverage ratio | T3 | /guides/pipeline-coverage-ratio/ | Guide | 1,400 | $16,330 | 1 | 16 |
| quota attainment benchmarks | T3 | /research/quota-attainment/ | Research | 810 | $9,450 | 3 | 3 |
| deal scoring model | T3 | /guides/deal-scoring-model/ | Guide | 480 | $5,600 | 2 | 3 |
| crm data hygiene | T3 | /guides/crm-data-hygiene/ | Guide | 1,100 | $12,830 | 1 | 13 |
| sales pipeline template | T3 | /templates/sales-pipeline/ | Template | 6,600 | $76,982 | 2 | 38 |
| what is revenue operations | T4 | /glossary/revenue-operations/ | Glossary | 9,900 | $25,660 | 1 | 26 |
| mrr forecasting | T4 | /glossary/mrr-forecasting/ | Glossary | 2,100 | $5,443 | 1 | 5 |

Total modelled annual pipeline across the twenty rows is roughly $1.14M. Look at what the sort produces. Apollo alternatives at 3,100 searches beats the 9,900 search definitional query by a factor of ten, and the three integration pages carry real value but drop down the queue because they need engineering. That sequencing decision is the map's whole job.

Every figure in column 8 depends on hitting the target position, which most rows will not do in year one. Treat the column as a ranking device for deciding order, not as a revenue promise. If you put the $1.14M total in a board deck without the position assumption attached, you will be explaining yourself in two quarters.

## The cannibalisation flag, in two formulas

Column 12 holds one formula that catches both failure directions. In Google Sheets, with keywords in column A and target URLs in column D:

```
=IF(AND(D2<>"", COUNTIF($D$2:$D, D2)>1), "DUPE URL",
 IF(COUNTIF($A$2:$A, A2)>1, "DUPE KEYWORD",
 IF(D2="", "NO TARGET", "")))
```

Conditional formatting on that column, red for DUPE URL, amber for NO TARGET. Then add a second check that runs against reality rather than the plan: pull the Search Console query export monthly, and flag any query where two URLs both received clicks in the same month. The sheet catches planning collisions. The export catches the ones that already shipped.

## Status, owners and the weekly fifteen minutes

Column 10 takes a person's name. Not Content Team, not Agency. A named human, because unowned rows sit for a quarter and then get rediscovered in a planning session as though they were new.

Status moves through six values: Backlog, Briefed, Drafting, Review, Published, Refresh due. The last one is the important one and almost nobody includes it. Set a formula that flips any published row to Refresh due when its position drops more than five places or twelve months pass, whichever comes first. That single column is what stops a map from becoming a record of things you did in 2026.

Run the review weekly, fifteen minutes, three questions. What moved from Drafting to Review. What flags fired. What changed position enough to reorder the queue. The cadence side of this is covered properly in [lesson 3 on cadence, distribution and targets](/courses/b2b-saas-content-strategy/03-cadence-and-distribution/).

## What this template does not solve

It will not tell you whether the cluster is worth entering. A map built on a category where your product does not fit will produce beautifully sequenced pages that convert at 0.1%. Work out coverage first, which is what [lesson 2 on building the coverage map](/courses/b2b-saas-content-strategy/02-build-the-coverage-map/) is for, then map keywords inside the clusters that survive.

It also handles programmatic page sets badly. Four thousand integration URLs do not belong as four thousand rows. Represent the whole set as one row with a pattern in the target URL column, then manage the specifics through the [programmatic page brief template](/templates/programmatic-page-brief-template/) where indexation thresholds and kill criteria live.

The honest cost: a first build takes a focused day for 200 keywords, and the maintenance runs about an hour a week. Teams that treat it as a one time exercise get three useful months out of it before the position column goes stale and people quietly revert to arguing about topics in Slack.

## Build it this week

Copy the twelve columns into a new sheet. Paste your existing keyword export into a Backlog tab, not the map. Promote only the rows where you can name the target URL today, add the three formulas, then sort by priority and brief the top ten. If you want the whole thing sequenced against a start date, the [90 day SaaS SEO plan](/playbooks/saas-seo-90-day-plan/) slots this map into week one, and [the keyword map lesson](/courses/saas-seo-sprint/01-keyword-map/) walks through the build with a screen share. The broader programme context sits in the [SaaS SEO](/saas-seo/) hub.

## Frequently asked questions

### What is a keyword map in SEO?

A keyword map is a spreadsheet that assigns every target keyword to exactly one URL on your site, along with the page type that will serve it, who is writing it and when. It converts a keyword research export into a publishing plan. Without one, two writers eventually build two pages for the same query and both underperform.

### How do you build a keyword map for a SaaS website?

Export your keyword set, group into clusters, tag each keyword with an intent tier, then assign a single target URL per keyword. Model pipeline value from volume, expected click through rate, signup rate and ACV. Sort by that value, add an owner and a due date to the top rows, and run a duplicate check before anything enters the writing queue.

### Should one URL target multiple keywords?

One URL should own one primary keyword and as many secondary variants as sit inside the same intent. A comparison page can rank for the plural, the year qualified version and the alternatives phrasing. It should not also be assigned a definition query or a use case query, because those readers want a different page and the copy cannot serve both well.

### How do you prioritise keywords in a keyword map?

Score each row on modelled pipeline value divided by effort. Pipeline value comes from volume times expected click through rate times visitor to signup rate times signup to opportunity rate times ACV. Effort is a three point band covering research depth and engineering dependency. Publish top scores first and revisit the ranking every quarter as positions change.

### What is keyword cannibalisation and how does a map prevent it?

Cannibalisation happens when two of your URLs compete for the same query, splitting links and click signals so neither ranks well. A keyword map prevents it structurally: because every keyword carries one target URL, a COUNTIF formula can flag the moment a second row claims that URL or a second URL claims that keyword, before either page gets written.

### How many keywords should a SaaS keyword map contain?

For a first year programme, 150 to 400 mapped keywords is a working range, covering roughly 40 to 90 URLs. Beyond that the map becomes a maintenance job nobody does. Keep a separate research backlog sheet for everything you have not committed to, and promote rows into the map only when they get a target URL and an owner.

### Do I need a keyword map if I use a content calendar?

Yes, because they answer different questions. The calendar says what ships when. The map says why that page exists, what query it owns, what it is worth and which URL it must not overlap with. Teams that run only a calendar end up with a well scheduled set of pages that collide with each other in the index.
