Satelo / Website promotion / Content Calendar Template for Blogs: A Free Sheet Built for SEO
Content

Content Calendar Template for Blogs: A Free Sheet Built for SEO

A blog content calendar is a spreadsheet where each row is one article: publish date, status, primary keyword, search intent, topic hub, internal links in and out, call to action and the next review date. Most free templates are built for social media posts and miss the SEO columns, which is why blogs end up with duplicate topics and orphan posts. Below is a copy-paste template for Google Sheets, Excel or Notion, what each column is for, a filled example and a simple weekly routine for a one-person blog.

Published: 2026-10-21 · 5 min read · Satelo

Content Calendar Template for Blogs: A Free Sheet Built for SEO

Why a blog calendar is not a social media calendar

Social calendars track channels, captions and posting times. A blog calendar has a different job: making sure every article targets a query no other post on your site already targets, sits in a topic cluster, links to and from related posts, and gets revisited when it ages. Those four things decide whether a small blog builds topical authority or a pile of disconnected posts.

So the template below has fewer "channel" columns and more SEO ones. If you also post on social networks, keep that in a separate tab and link rows by URL.

The template (copy and paste)

Copy the block below and paste it into cell A1 of a new Google Sheet or Excel workbook. The columns are tab-separated, so they split automatically. For Notion, save it as a .csv file (replace tabs with commas) and import it as a database.

Publish date	Status	Working title	Primary keyword	Intent	Hub	Slug	Links in (from)	Links out (to)	CTA	Owner	Published URL	Last updated	Next review	Notes
2026-11-03	Idea	How to repot a snake plant	repot snake plant	How-to	Houseplant care	repot-snake-plant	snake-plant-care	best-potting-mix	Newsletter	Me			2027-05-03	Example row: delete it

Add data validation to two columns to keep the sheet clean: Status (Idea, Brief, Draft, Edit, Scheduled, Published, Update) and Intent (Informational, How-to, Comparison, Transactional). In Google Sheets that is Data → Data validation → Dropdown.

What each column is for

ColumnWhy it's there
Publish dateA planned date, not a promise. Keep a realistic cadence you can sustain.
StatusOne word, from a dropdown, so you can filter "what's in progress".
Working titlePhrased like the query, not a clever headline. You can polish later.
Primary keywordOne per row. Before adding a row, search this column: if the keyword or a close variant is already there, update that post instead. This is your main defense against keyword cannibalization.
IntentTells you the format: a how-to needs steps, a comparison needs a table.
HubThe topic cluster the post belongs to. Filter by hub to see which clusters are thin.
SlugDecide the URL up front so other rows can link to it before it's live.
Links in / Links outWhich existing posts will link to this one, and which it will link to. Fill both before writing. See our internal linking strategy for how many and where.
CTAThe one action you want readers to take: subscribe, try a tool, read the hub page.
OwnerEven on a solo blog, useful once you work with guest authors or editors.
Published URLFilled on publish day; makes the sheet your content inventory.
Last updated / Next reviewWhen you last made a real change, and when to check the post again.
NotesSources to cite, angle, what competitors miss.

How to fill it: from keyword list to schedule

  1. Dump ideas into rows with status "Idea": reader questions, Search Console queries with impressions but no matching post, keyword research. Our guide to low-competition keywords covers free ways to find them.
  2. Assign a hub to each idea. If an idea fits no hub, ask whether it belongs on your blog at all.
  3. Deduplicate. Sort by Primary keyword and merge rows that target the same intent.
  4. Prioritize. First the hub pages and the posts that hub pages will link to, then supporting posts. Alternate hubs so one cluster doesn't stall while another grows.
  5. Write a brief for the next two or three rows. The SEO content brief template plugs straight into this sheet: one brief per row.
  6. Set dates last. Count backward from how many posts you actually finished in the last month, not from what you hope to write.

A filled example (for illustration)

Imagine a houseplant blog with about 30 posts. Before using a calendar, it had three posts targeting "snake plant care" variants and several posts nobody linked to. A month of rows might look like this:

DateTitleHubLinks inLinks outStatus
Nov 3How to repot a snake plantHouseplant caresnake-plant-carebest-potting-mixDraft
Nov 10Best potting mix for succulents (tested)Soil & suppliesrepot-snake-plant, succulent-caresoil-hubBrief
Nov 17Snake plant care (merge of 3 old posts)Houseplant carehouseplant-care-hubrepot-snake-plant, yellow-leavesUpdate
Nov 24Why are my plant's leaves turning yellow?Problemssnake-plant-careoverwatering-signsIdea

Notice the third row: an update counts as a calendar slot. Merging three weak posts into one strong one is often worth more than a new article.

Plan updates, not just new posts

The Last updated and Next review columns turn the calendar into a maintenance plan. A practical rule for a small blog: review evergreen posts every 6 to 12 months, and sooner for anything with prices, tools or rules. When you update, change the date only if the content really changed: Google's helpful content guidance asks site owners whether they are "changing the date of pages to make them seem fresh when the content has not substantially changed". Our guide to updating old blog posts explains what counts as a real update.

The same guidance also says Google has no preferred word count, so there is no "target length" column here. Length follows intent.

A weekly routine for a one-person blog

Add promotion to the plan

Publishing is half the work; the other half is getting a new post seen. Add a "Promotion" column if you like: newsletter, community, partner site. One way to get relevant mentions for new posts is an article exchange with sites at your level. In Satelo, you publish partner articles on your blog, earn satellites, and spend them on articles about your site from other members (in a circle, not a direct swap, with every link marked rel="sponsored"). Joining is free and takes a few minutes; Satelo is a public beta with a small network, so treat it as one channel in your plan, not the whole plan.

FAQ

What should a blog content calendar include?

At minimum: publish date, status, working title, one primary keyword, search intent, topic hub, internal links in and out, call to action, published URL and a next review date. The SEO columns are what separate a blog calendar from a social media calendar.

Is there a free content calendar template for Google Sheets?

Yes. Copy the tab-separated template in this article and paste it into cell A1 of a new Google Sheet. The columns split automatically, and you can add dropdowns for Status and Intent with Data validation.

Can I use this template in Notion?

Yes. Save the template as a CSV file by replacing tabs with commas, then import it into Notion as a database. Status and Intent work well as select properties, and you can add a calendar view on the Publish date column.

How far ahead should a small blog plan content?

Four to eight weeks of dated rows is enough for most solo bloggers, plus an unscheduled list of ideas. Set dates based on how many posts you actually finished recently, not on an ideal cadence.

How do I avoid writing two posts on the same topic?

Give every row exactly one primary keyword and search that column before adding a new row. If a close variant is already planned or published, update or expand that post instead of creating a new one.

Should updates to old posts go in the content calendar?

Yes. Treat an update as a calendar slot with status Update. Use the Next review column to schedule them, and change the visible date only when the content has substantially changed.

How many posts a week should I schedule?

There is no required number. Pick a cadence you can keep for months, even one post a week or every two weeks, and fill the remaining time with updates and internal linking. Google says it has no preferred word count, and quality matters more than volume.

What is the difference between a content calendar and a content brief?

The calendar is the list of all planned articles with dates and status. A brief is the detailed plan for one article: angle, headings, sources and links. Typically each calendar row gets a brief a week or two before writing.

Satelo team
We build Satelo, a network where small websites promote each other. About us

Read next

Content Pruning for Small Blogs: When to Delete, Merge or Keep a PostContent pruning for SEO on a small blog: a simple keep, improve, merge or delete decision, when to use 301, 404, 410 or noindex, and what you should never cut.
E-E-A-T for Small Blogs: What You Can Actually ShowE-E-A-T signals a one-person blog can show: first-hand experience, a real About page, sources, dates and bylines. What Google says, plus a 10-point checklist.
How to Find Low-Competition Keywords for a New Blog (Free Method)How to find low competition keywords for a new blog with free tools only: autocomplete, People Also Ask, reading the top results, Trends and Search Console.
SEO Content Brief Template for Bloggers: Copy It, Fill It, Hand It OffA free SEO content brief template for bloggers: each field explained, a filled-in example, free ways to gather the data, and a version to hand to an AI writer.

Check your site's Quality Score

Free, no sign-up: a 0–100 score from mostly open data. Then add your site to Satelo and get partner articles from sites of your level.

Add my site