SEO & GEO Content Plan Template

Free template

Your content calendar is missing eight columns.

A content plan tells you what to publish and when. It says nothing about whether anything will cite it. This is the plan we build in month one, with the eight columns that decide that added on the end.

No email. No signup. Rebrand it and use it with your own clients if you like.

The content plan The GEO layer
TitleFunnelPrimary KeywordVolumeKD Prompt TargetAI SurfaceAI Overview Citation BaselineAnswer BlockSchema Citable AssetGEO Priority
What Is Skill Training? The In-Depth Guide for 2026 TOFU what is skill training 16,900 25 “what is skill training and why does it matter” All Yes Competitor cited Yes FAQPage Original data High

Everything up to KD is what a content calendar already tells you: publish this, target that, here is the volume. It is a perfectly good plan. It just cannot tell you whether anything will cite the piece.

The problem

A calendar plans the writing. Not the citation.

Take that row. Sixteen thousand nine hundred searches a month, keyword difficulty of 25, so an easy win by every metric a normal plan tracks. Then look at the last eight columns: the query already triggers an AI Overview, and a competitor is the one being quoted in it. Rank first and you are still watching someone else answer the question.

Ranking and being cited are now two jobs

Position one under an AI Overview gets a fraction of the clicks it used to. The piece has to be built to be quoted, not just found. That is a different brief for the writer, and it has to be decided before anyone starts writing, not after.

Nobody records the before

Almost every content plan starts the day writing starts. So when the piece goes live and gets cited, there is no way to prove it changed anything. The Citation Baseline column is one cell, filled in before you write, and it is the whole difference between a report and an anecdote.

Volume tells you nothing about the gap

A 16,900-volume keyword where a competitor owns the AI Overview and a 200-volume prompt nobody has answered are not the same opportunity, and the second is often the better one. A plan with no citation data cannot see that, so it sorts by volume and calls it strategy.
The layer

The eight columns.

Columns A to J are an ordinary content plan: title, cluster, funnel stage, writer, status, keyword, volume, difficulty. Keep whatever you already do there. Columns K to R are the layer, headed in brand red in the file so you can never mistake one half for the other.

KPrompt Target
The full natural-language question someone asks an AI assistant.
This is not the keyword. “skill training” is a keyword. “what is skill training and why does it matter” is a prompt. AI engines match on the prompt, so write the piece to answer that sentence.
LAI Surface
Which assistant this piece is aimed at being cited in.
Perplexity favours fresh, densely sourced pages. ChatGPT leans on established, widely referenced ones. Google AI Overview pulls from what already ranks. Different targets, different builds.
MAI Overview
Does the keyword currently trigger an AI Overview on Google.
If yes, classic position one is worth far less than it was and the piece must be built to be quoted rather than clicked. If no, treat it as a normal SEO play.
YesNoUnknown
NCitation Baseline
Who gets cited for this prompt today, checked before you write.
The single most useful cell here. “Nobody cited” is an open goal. “Competitor cited” tells you what to beat and what to include. Recheck after publishing and watch it move.
We are citedCompetitor citedNobody citedNot checked
OAnswer Block
Does the piece open with a self-contained 40 to 60 word direct answer.
Extraction bait. Engines lift a clean, complete paragraph that answers the prompt without needing the rest of the page. No answer block, no citation.
YesNoN/A
PSchema
The JSON-LD type on the page.
FAQPage and HowTo give engines pre-parsed question-and-answer pairs. Same reason it worked for the ICFF sub-events: structure gets read.
QCitable Asset
The one thing on this page that exists nowhere else.
Original data, a first-party stat, a named quote, a screenshot. Engines cite sources, not summaries. A page with “None” here is a page that paraphrases what is already cited, so it will not get picked up.
Original dataFirst-party statNamed quoteScreenshot proofCited third-partyNone
RGEO Priority
High, Medium, Low.
Sequencing. High is where the prompt has volume, an AI Overview is present, and nobody or only a competitor is cited. It carries brand red in the file, because High is not a compliment. It is the row that needs you.
HighMediumLow
The method

How to run it yourself.

The whole thing is on this page. If you want to do it yourself, this is everything you need.

1

Build the plan half first

Columns A to J, exactly as you would build any content plan. Titles, clusters, funnel stage, who writes it, status, keyword, volume, difficulty. Rename the red month rows to real months and add rows underneath.
One rule: volume and difficulty come from Ahrefs, Semrush, or Keywords Everywhere. Never estimate them for a client. A made-up number in a deliverable is worse than an empty cell, because an empty cell is honest.
2

Write the prompt, not the keyword

For every row, put the actual sentence a person would type into an assistant in column K. Not the keyword with a question mark bolted on. The real, clumsy, over-specific way people talk when they are asking a machine for help.
This one column changes the brief. A writer told to target “skill training” writes a keyword page. A writer told to answer “what is skill training and why does it matter” writes something an engine can lift.
3

Check who is cited today, before you write a word

Run the prompt in each surface in a clean session with no history, and record what gets cited in column N. This is manual. There is no tool that does it properly yet, and it takes about a minute per prompt.
Do it before writing, not after. Without a before, you have no proof the piece moved anything, and “we published twelve articles” is not a result. It is an activity log.
4

Build the piece to be extracted

Three columns, three decisions, all made before writing starts. An answer block: a self-contained 40 to 60 word paragraph up top that answers the prompt on its own. Schema: FAQPage or HowTo, so the structure is pre-parsed. And a citable asset: one thing on the page that exists nowhere else.
The asset is the one people skip, and it is the one that decides the outcome. Engines cite sources, not summaries. If the honest answer in column Q is “None”, you are writing a page that repeats what is already cited elsewhere, and it will not get picked up. Fix that in the plan, not in the edit.
5

Recheck the baseline monthly

Duplicate the tab and date it, or add a dated column pair, so “Competitor cited” turning into “We are cited” is visible rather than remembered. The tracker on the Legend tab counts it for you: citation share, answer block coverage, how many pieces still have no citable asset.
This plan gives you the before and after per piece. If you want the ongoing version across a whole prompt set and every engine, that is the GEO visibility tracker, and the two are designed to sit side by side.
Calibration

Three ways people get this wrong.

Filling the GEO columns after publishing

Then they are a report, not a plan. Every one of those eight columns is a decision that changes what gets written. Filled in afterwards they change nothing, and you have added admin to your workflow for no return.

Sorting by volume

GEO Priority is not a copy of keyword volume. It is where volume, an AI Overview, and an uncited prompt overlap. A quiet prompt nobody has answered will often beat a loud one a competitor already owns.

Letting “None” sit in the citable asset column

It is the most honest cell in the file and the easiest one to quietly fudge. A row of “None” down column Q is a content plan that will produce twelve competent articles that no engine has any reason to quote.
Questions

FAQ

Is the content plan template really free?
Yes, and there is no email form. Download it, edit it, rebrand it, use it with your own clients. It is the file we build in month one of an engagement, published as it is.
What is the difference between a keyword and a prompt target?
A keyword is what someone types into a search box: “skill training”. A prompt is what they type into an assistant: “what is skill training and why does it matter”. Search engines match on the first. AI engines match on the second. Most content plans only record the first, which is why the pieces they produce answer a phrase instead of a question.
Do I need the GEO columns if my SEO is already working?
If none of your target queries trigger AI Overviews and nobody in your market asks assistants for recommendations, no. Check column M across ten of your keywords before you decide that, though. The answer surprises people. Where an AI Overview exists, ranking first and being quoted are two separate outcomes, and only one of them sends anybody to your site.
How do I check the citation baseline?
Manually, for now. Run the prompt in each surface in a clean session with no chat history and no personalisation, then record who gets cited. About a minute per prompt. Doing it signed into an account you use daily measures your own history, not the model.
Can I use it in Google Sheets?
Yes. Use the Make a copy link at the top of this page. The dropdowns, colour coding and the live tracker all carry across.
How many rows does it handle?
The dropdowns and tracker formulas run to row 100. Add rows past that and you have to extend both, or the tracker will quietly stop counting them.
Or we can just build it

The plan is the easy part.

Filling eight columns is an afternoon. Running the citation checks every month, writing pieces that actually earn a quote, and getting cited where the assistants are already looking is the job. That is the engagement.