Bulk SEO Studio — User Guide

Complete documentation for using the plugin. For setup/licensing on the business side, see FREEMIUS-SETUP.md; for architecture/code, see DEVELOPERS.md and TECHNICAL-REFERENCE.md.


What Bulk SEO Studio does

Bulk SEO Studio lets you edit SEO fields — page titles, meta title/ description, headings (H1–H6), publish status, and (Pro) JSON-LD schema markup — across many WordPress pages or posts at once, through a spreadsheet-style grid, instead of opening each one individually.

It never recreates or rebuilds content. It locates and updates only the exact fields you approve, and nothing is written to the database until you’ve explicitly reviewed a side-by-side preview and confirmed.


Installation

  1. Free version: Plugins → Add New → search “Bulk SEO Studio” → Install → Activate. Or upload the zip manually via Plugins → Add New → Upload Plugin.
  2. Pro version: Upload the Pro zip the same way (Upload Plugin), or — simpler — if you already have the Free version installed, go to Bulk SEO Studio → Account (added automatically once licensed) and enter your license key. The plugin upgrades itself in place; you don’t need to deactivate or reinstall anything.
  3. No configuration is required to start. Visit Bulk SEO Studio in your admin menu.

The admin menu

  • Dashboard — overview, quick links, at-a-glance stats
  • Bulk Editor — the main spreadsheet tool (titles, meta, headings, status)
  • Bulk Schema (Pro) — JSON-LD structured data editor
  • History — every batch you’ve saved, with undo
  • Undo Changes — granular per-page/per-selection restore
  • Settings — post types, batch size, backup retention
  • Account (Pro, added by the licensing SDK) — license management, billing

Bulk Editor: step by step

1. Get pages into the grid

Three ways:

  • Scan Site — filter by search term, status, post type, or builder (Elementor/Gutenberg/Classic), then click Scan.
  • Paste a list of URLs — for a quick, unfiltered match against specific pages.
  • Bulk Import from Spreadsheet (Pro) — paste or upload a full spreadsheet with a URL column plus any combination of Page Title, Status, Meta Title, Meta Description, and heading columns, and it’s matched and loaded into the grid in one step. Heading columns use the same labels shown in Edit Headings (H1, H2-1, H2-2, etc.).

Any URL that doesn’t match a real post is reported explicitly — a “Show list” toggle reveals exactly which ones, so nothing silently disappears.

2. Edit

  • Click any cell (Page Title, Meta Title, Meta Description) and type, or select a range and paste directly from Excel or Google Sheets.
  • Use Ctrl+C / Ctrl+V, Tab/Enter to navigate, and Ctrl+D to fill a selection down from the top cell.
  • Change Status via the per-row dropdown, or select multiple rows and use “Bulk set status” in the toolbar to apply one status to all of them.
  • Click Edit Headings on any row to open the heading editor for that page — shows every detected heading in visual order (H1-1, H2-1, H2-2, etc.), with current text/tag, editable inline.

On Elementor pages (Pro): heading editing works the same way, safely targeting only the specific heading widget’s text/tag — layout, styling, and every other widget are left untouched. On the Free version, Elementor pages are fully scannable/filterable and their title/status/meta can still be bulk-edited; only heading editing requires Pro.

Gutenberg/Classic pages: the real WordPress Page Title is always treated as the page’s H1 (shown as “H1-1 (Page Title)”), since that’s what your theme actually renders as the page’s H1 landmark. Its tag can’t be changed (theme-controlled), but its text can — editing it here updates the actual post title.

3. Preview

Click Preview Changes. Every proposed change is shown current-value vs. new-value, with a checkbox per field — uncheck anything you don’t want applied. Warnings (missing H1, duplicate headings, conflicting SEO metadata across plugins) are shown here, not buried in a log.

Nothing is saved yet at this point.

4. Save

Click Confirm Changes. A progress popup shows exactly how many pages have been processed. Every page is automatically backed up immediately before its fields are written, so the whole batch (or any single page in it) can be undone later.

If your connection drops mid-save, the popup pauses with a Resume button rather than losing progress or silently continuing — click Resume once you’re back online and it continues from the exact next page, with nothing double-processed.


Bulk Schema (Pro)

A separate tab for bulk-adding JSON-LD structured data, independent of whatever SEO plugin you already use (it never reads or modifies another plugin’s schema — both simply coexist as separate script blocks on the page if you use more than one).

Detect existing schema

Click Detect (or Detect Existing Schema for Selected for many rows at once) to fetch the actual live page and list every schema block already present — from any source: another SEO plugin, your theme, or hand-added code. Use this before adding more, to avoid duplicating a schema type that’s already there (Preview also warns you if a new block’s type matches one already live).

Add a schema block

Click Edit Schema on any row. Two ways to add a block:

  • Guided builder — pick a type (Article, Product, FAQPage, LocalBusiness, Organization, Event, HowTo, Review, or BreadcrumbList) and fill in the relevant fields; repeatable fields (FAQ questions, HowTo steps, breadcrumb items) have their own add/remove controls.
  • Custom / Raw JSON-LD — paste any JSON-LD object (must include @type) for full control, or for schema types the guided builder doesn’t cover.

Existing stored blocks are shown as editable raw JSON, so nothing is locked away even if it was originally added via the guided builder.

Bulk import (Pro)

Same idea as the Bulk Editor’s importer: paste or upload a spreadsheet with a URL column and one or more “Schema JSON-LD” columns (one complete JSON-LD object per cell).

Preview & Save

Same safety model as the Bulk Editor — every block is shown before saving, individually checkable, and blocks that will be removed (replaced by your new set) are called out separately. Full backup/undo through the same History screen.


History & Undo

History lists every batch you’ve saved: date, user, pages changed, fields changed. From here:

  • View Changes — see exactly what changed, page by page
  • Undo Batch — restore every field the whole batch touched, in one click

Undo Changes (reached via History → View Changes) gives finer control: undo a single page, or select several and undo just those — restoring page title, status, SEO metadata, and heading content/tags to their exact prior values, including the full Elementor JSON snapshot where relevant.


Settings

  • Post types to scan — choose which post types are included, or enable “Include all custom post types automatically” to scan every registered public post type without maintaining a list.
  • AJAX batch chunk size — how many pages are processed per save request (default 10; free tier capped at 20, Pro allows up to 100). Lower this if your host has a strict PHP execution timeout.
  • Pages per batch save — Free tier: up to 20 pages staged per Preview → Save action. Pro: unlimited.
  • Backup retention — how long backups are kept before they’re eligible for cleanup (informational; no automatic deletion happens by default).

Free vs. Pro

 FreePro
Scan / paste URLs / grid editor
Mandatory Preview + full backup/undo
Page title, status, meta title/description✅ (one SEO plugin)✅ (multiple, with conflict detection)
Gutenberg/Classic heading editing
Elementor heading editing
Bulk Schema module
Spreadsheet bulk import (mapping + file upload)
Pages per save batch20Unlimited

Troubleshooting

A change doesn’t appear on the live page after saving. The plugin automatically clears relevant caches (including Elementor’s CSS cache) after every save. If it still doesn’t appear, this is almost always an external full-page cache plugin or CDN — purge that cache directly. As a manual fallback for Elementor specifically: Elementor → Tools → Regenerate CSS & Data.

A heading update didn’t apply. Check the page’s health/warnings in Preview — if a heading couldn’t be confidently located (e.g. the page structure changed since scanning), it’s skipped and reported rather than guessed at. Re-scan and try again.

Bulk import via spreadsheet seems to hang or take a very long time. This was a real, fixed bug in earlier versions (sequential per-post requests). If you’re on an old version, update — heading resolution now uses a batched endpoint (up to 60 posts per request) instead of one request per post.

“The free version supports up to 20 pages per batch” message. You’ve hit the free-tier batch cap — either save in smaller batches, or upgrade to Pro for unlimited batch size.

I ran Undo and nothing seemed to change for an Elementor page (Free version). Free version never writes to Elementor content, so there’s nothing to undo there — this is expected, not an error.


FAQ

Does this replace my SEO plugin? No — it reads and writes the same meta title/description fields your SEO plugin already uses. It’s a bulk editing interface, not a replacement for sitemaps, redirects, content analysis, etc.

Will this break my Elementor pages? Heading edits target only the specific heading widget’s text/tag — layout, styling, and every other widget are left untouched, verified via targeted JSON updates rather than a full page rebuild.

What happens if my Pro license expires? The plugin keeps working exactly as configured — it just stops receiving updates and support until renewed. Nothing is ever hard-locked.

Does this work with custom post types? Yes, by default (toggleable in Settings).

Is my data sent anywhere? All scanning, editing, and saving happens within your own WordPress site via standard admin-ajax requests — nothing is sent externally. (The Pro version’s licensing/update checks do talk to Freemius’s servers, the same way any licensed plugin does.)