Programmatic SEO plugin for WordPress. Bulk-create SEO-optimised pages from CSV — with built-in Schema, Meta Tags, XML Sitemap and WP-CLI. 100% free. Open source.
PSEO PRO is an open-source WordPress plugin built for SEO professionals, digital marketers, and agencies who need to create large volumes of highly targeted pages from structured data — without writing a single line of code.
You bring the data (a CSV file). You build one template page. PSEO PRO does the rest — replacing {{placeholders}} with your data to generate hundreds or thousands of unique, SEO-ready pages instantly.
Each generated page gets its own title tag, meta description, canonical URL, robots tag, and JSON-LD schema markup — all derived automatically from your data row.
Connects to your CSV upload. Parses everything into a row-by-row array where each row becomes one WordPress page. No row limits, no timeouts with WP-CLI.
CSV UploadEach row is MD5-hashed and stored in wp_pseo_data_rows. On every sync, only rows whose hash has changed are re-processed. New rows create pages. Changed rows update pages. Deleted rows trigger orphan detection.
Your WordPress page is cloned per row. Every {{placeholder}} in title, content, URL slug, meta title, meta description, and schema fields is replaced with that row's column value. Supports {{raw:col}}, {A|B|C} spintax, and [if:col=val]...[/if] conditional blocks.
Pages are created via wp_insert_post(). The SEO class hooks into wp_head at priority 1 to inject title tag, meta description, robots directive, canonical URL, and full JSON-LD schema — specific to each row's data.
All generated pages are listed in a custom XML sitemap at /pseo-sitemap.xml. A WP Cron event runs on your chosen schedule — hourly, daily, or weekly — re-fetching data and regenerating changed pages completely hands-free.
Upload your CSV directly. Column headers become {{placeholder}} names automatically. No mapping needed.
Placeholders, raw HTML output, spintax for content variation, and conditional blocks with full comparison operators.
Custom title, meta description, robots, canonical URL, and JSON-LD schema per page — auto-populated from your data.
No limits on rows, pages, or projects. Run multiple campaigns simultaneously with different data and templates.
Hourly/daily/weekly cron sync. Only changed rows re-processed. Orphan pages auto-deleted when data is removed.
Dedicated sitemap at /pseo-sitemap.xml listing all generated pages. Submit directly to Google Search Console.
Generate, delete, and list projects from terminal. Ideal for 10,000+ pages without PHP timeout issues.
Nonce-verified AJAX, capability checks, escaped outputs, sanitized inputs. Passes WordPress Plugin Check.
PSR-4 class autoloader, pseo_schema filter hook for custom schema, clean custom DB tables, zero plugin dependencies.
Plumbing / Electrician in {{city}}
→ 1,000+ pagesProperties in {{city}}, {{locality}}
→ 10,000+ pages{{job_title}} jobs in {{city}}
→ 5,000+ pages{{product}} price in {{city}}
→ 2,000+ pages{{course}} colleges in {{city}}
→ 3,000+ pagesHotels in {{city}}, {{area}}
→ 8,000+ pages{{tool}} alternatives & reviews
→ 500+ pages{{loan_type}} in {{city}}
→ 1,500+ pagesCompared against the most popular programmatic SEO plugins for WordPress.
| Feature | PSEO PRO KNR ⚡ | MPG by ThemeIsle | WP All Import | Thematic (SaaS) |
|---|---|---|---|---|
| Price | 100% Free | $99–$399/yr | $99/yr | $99–$299/mo |
| No-code setup | ✓ | ✓ | ✓ | ✓ |
| CSV source | ✓ | ✓ | ✓ | ✓ |
| Built-in JSON-LD Schema | ✓ 6 types | Shortcode only | ✗ | Limited |
| Auto XML Sitemap | ✓ | ✓ | ✗ | ✓ |
| Row hash diff | ✓ | ✗ | ✗ | ✗ |
| Smart orphan deletion | ✓ | Manual | Partial | ✓ |
| Spintax support | ✓ | ✓ | ✗ | Basic |
| Conditional blocks | ✓ | ✓ | ✗ | ✗ |
| WP-CLI support | ✓ | ✗ | ✗ | ✗ |
| Auto-sync / Cron | ✓ | ✓ PRO | Manual | ✓ |
| Data on your server | ✓ | ✓ | ✓ | ✗ SaaS |
| Open source | ✓ GPL-2.0 | ✗ | ✗ | ✗ |
Inserts the HTML-escaped value of the CSV column named column.
Inserts the raw, unescaped value — for HTML content stored inside the CSV.
Spintax — randomly picks one option per page generation for content variation.
Conditional block — shows content only if the column matches the given value.
Numeric comparison — supports =, !=, >, <, >=, <= operators.
URL pattern field — use placeholders in the slug for clean, keyword-rich URLs.
Schema is auto-generated per page from your CSV columns — no shortcodes or coding required.
Auto-populated from post title, date, and author.
For service/location pages. Requires address, phone, and city columns.
For eCommerce or comparison pages with product name and pricing data.
Generates FAQ rich results from Q&A column pairs in your CSV.
Auto-generated from the URL structure of the generated page.
For job listing pages. Requires job title, company, and location.
Follow these 7 steps to launch your first programmatic SEO campaign.
Download the zip from Download and upload via WP Admin → Plugins → Add New → Upload Plugin. After activation, go to Settings → Permalinks → Save Changes to flush rewrite rules.
wp plugin install pseo-pro-knr.zip --activate && wp rewrite flushCreate your dataset with column headers in row 1 — these become your {{placeholder}} names. Save as .csv and upload directly in the plugin.
City and template {{city}} will NOT match. Always use lowercase column headers.Create a new WordPress page using Elementor, Gutenberg, or plain HTML. Write content using {{column_name}} placeholders wherever your data should appear.
{{city}} in H1 headings, paragraphs, image alt text{{raw:description}} for HTML-heavy content columns{Best|Top|Leading} spintax for content variationGo to PSEO PRO → New Project in WP Admin. Fill in all settings:
{{service}}/{{city}}{{service}} in {{city}} | BrandBefore generating, click 👁 Preview Data. This fetches your CSV live and shows the first 5 rows, total row count, and all detected column names — so you can verify placeholder names match exactly.
Click ⚡ Generate Pages Now. PSEO PRO fetches all rows, applies the template, and creates or updates WordPress pages in bulk. For 10,000+ pages, use WP-CLI:
wp pseo list — view all projectswp pseo generate --id=1 — generate project #1wp pseo generate --all --delete-orphans — all projects + clean orphansYour sitemap is at https://yourdomain.com/pseo-sitemap.xml. Go to Google Search Console → Sitemaps and submit it.