Programmatic SEO overview
3 min read
Programmatic SEO turns a table of data into a large number of search-optimized pages. You keep one table (for example 500 cities), design one page, and the plugin serves one URL per row: /guides/lyon/, /guides/porto/ and so on. When the data changes, the pages change with it.
It is a Pro feature (Programmatic SEO in the plugin's Pro tools menu, wp-admin/admin.php?page=wpmcf-pseo). AI-written content on top of it is described in AI setup.
The four building blocks
Block | What it is | Where you manage it |
|---|---|---|
Data source | The rows the pages are built from. A data table (CSV upload, Google Sheets link, or a feed of your posts, categories and WooCommerce products) or the table of a field group. | Data Tables screen (data tables) or Field Groups |
Page template | A normal WordPress page or post whose design and content every generated page reuses. You put | The normal editor (block editor, Elementor, Divi and other builders) |
Task | The recipe: which source, which template, URL pattern, title, SEO settings, structured data, languages, schedule, optional AI brief. | Programmatic SEO › New task |
Generated pages | The result: one URL per row (or per combination of rows). They are virtual: the plugin stores one small record per page, not a WordPress post. | Programmatic SEO › Pages of a task |
data table (rows) ──► task (URL pattern, SEO, schedule) ──► generated pages ──► visitors
▲
page template (design, {{ variables }})Virtual pages in one minute
- A generated page has no post in
wp_posts. When a visitor opens/guides/lyon/and WordPress has nothing there, the plugin finds the page record, loads the template and fills in the row's values. - Because there is no post per page, changing the template or the data updates all pages at once, and 50,000 pages cost one table of 50,000 small rows instead of 50,000 posts.
- Real WordPress content always wins: if a real page already uses the URL, the generated page is not shown (see Serving pages).
- If you later want real posts you can convert generated pages into posts.
What a run does
A task runs in the background (see Running and scheduling):
- It reads the rows of the source (after the filters you set).
- For every row it resolves the URL pattern and the title.
- New rows get a page, changed rows update theirs, rows that disappeared are marked removed (they answer
410 Goneor redirect, as you chose). - A page whose URL changed keeps its old URL as a 301 redirect.
- Caches, sitemaps and the pages' last modified date are updated.
Pages you edited by hand (title, URL, indexing, individual values) keep your edits.
What you can do per page
Every generated page gets:
- its own title and URL from your patterns
- its own SEO title, meta description, canonical URL, robots tag, share (Open Graph) tags and optional structured data (JSON-LD)
- an entry in the sitemap
- optional internal links to related pages, and hreflang tags in several languages (Business)
- optional AI-written field values, SEO title, meta description and structured data
Plans
Capability | Pro | Business | Agency |
|---|---|---|---|
Row mode: one page per row, sitemap, SEO settings, structured data, quick start | yes | yes | yes |
BYOK AI (your own API key) | yes | yes | yes |
Converting pages to posts | yes | yes | yes |
Generated pages in total | 5,000 | 50,000 | unlimited |
Tasks | 5 | 50 | unlimited |
Comparison mode (pages per combination of rows, several data sources) | no | yes | yes |
Scheduled sync (recurring runs) | no | yes | yes |
Pages in several languages (WPML, Polylang) | no | yes | yes |
Free sites do not have the feature at all (no locked buttons, no Pro code). The numbers and what happens when a license ends are in Limits and plans.
Where to go next
- First time? Start with the Quick start: sample data and 10 pages in a minute.
- Building your own: Data sources, then Tasks.
- Tuning: URL and title patterns, Templates and field values, SEO plugins and meta.
- Something wrong? Troubleshooting.
Still stuck? Contact support