Title: Assist SEO
Author: AssistPress
Published: <strong>September 23, 2026</strong>
Last modified: September 23, 2026

---

Search plugins

![](https://ps.w.org/assist-seo/assets/icon-256x256.png?rev=3709446)

# Assist SEO

 By [AssistPress](https://profiles.wordpress.org/assistpress/)

[Download](https://downloads.wordpress.org/plugin/assist-seo.0.1.zip)

 * [Details](https://wordpress.org/plugins/assist-seo/#description)
 * [Reviews](https://wordpress.org/plugins/assist-seo/#reviews)
 *  [Installation](https://wordpress.org/plugins/assist-seo/#installation)
 * [Development](https://wordpress.org/plugins/assist-seo/#developers)

 [Support](https://wordpress.org/support/plugin/assist-seo/)

## Description

Assist SEO gives you clean, standards-based control over how your content appears
in search results and when shared on social media — without the weight or upsell
noise of larger plugins.

It is built to be fast (nothing is loaded on the front end except the small amount
of metadata your pages actually output), safe (every input is sanitised, every output
escaped), and cooperative (if another SEO plugin is active, Assist SEO stays out
of the page head by default so you never get duplicate tags).

**What it does**

 * **Title templates** — Per–content-type templates with variables such as `%%title%%`,`%%
   sitename%%`, `%%sep%%` and more, with per-post overrides.
 * **Meta descriptions** — A manual description per post, with a sensible automatic
   fallback drawn from the excerpt or content. Assist SEO never fabricates a description
   from nothing.
 * **Canonical URLs** — Correct canonicals for singular content, archives and paged
   pages, with a manual override where you need one.
 * **Robots directives** — Per-post `noindex` / `nofollow`, reconciled so contradictory
   directives are never emitted.
 * **Open Graph & Twitter/X Cards** — Optional social markup with image fallbacks(
   per-post image  featured image  default image  site logo), plus per-post overrides
   for the social title, description and image.
 * **Structured data (Schema.org)** — A connected JSON-LD graph (WebSite, WebPage,
   your Organization or Person, Article/BlogPosting, and BreadcrumbList) with stable`@
   id` relationships. Advanced users can add their own validated custom JSON-LD,
   and each post can override its schema type.
 * **Breadcrumbs** — An accessible, server-rendered breadcrumb trail with matching
   BreadcrumbList schema, available via the `[assist_seo_breadcrumbs]` shortcode,
   the `assist_seo_breadcrumbs()` template function, or automatic insertion above
   your content.
 * **Robots.txt additions** — Append your own directives to the virtual robots.txt
   WordPress serves, from the Advanced tab.
 * **XML sitemap** — Extends the built-in WordPress sitemap and automatically excludes
   anything you mark `noindex` or exclude per-post.
 * **Editor integration** — A classic meta box (which also appears in the block 
   editor) with a live, approximate Google preview and character counters. An optional
   block-editor sidebar panel is included as source for developers who build the
   plugin’s assets.
 * **Content analysis** — A modular set of on-page SEO checks (title and description
   length, focus keyword placement, content length, subheadings, image alt text,
   internal and outbound links, featured image) with Good / Needs attention / Problem
   statuses. Guidance favours natural, reader-first content — never keyword stuffing,
   and no plugin can promise rankings.
 * **Redirect manager** — Create 301, 302, 307, 308 and 410 (Gone) redirects with
   plain or regular-expression sources, notes and groups. Includes enable/disable,
   search, pagination, hit counting, and JSON import/export. Redirect loops and 
   open-redirect/script-injection destinations are blocked, and the front-end lookup
   is indexed and cached so it stays fast on every request.
 * **404 monitor** — Logs not-found requests (with hit counts and first/last seen),
   so you can spot broken links and create a redirect from any entry in one click.
   Includes search, active/ignored filtering, ignore and delete, a retention cap
   so the log never grows without bound, and privacy-conscious referrer handling(
   host and path only — no query strings, no IP addresses) that can be turned off
   entirely.
 * **Taxonomy SEO** — Per-term SEO for categories, tags and public custom taxonomies:
   SEO title, meta description, canonical, robots (noindex/nofollow), Open Graph
   social fields, and sitemap exclusion, added right to the term-edit screens. Term
   archives output the correct title, description, canonical, robots, Open Graph
   and Twitter tags, with taxonomy title templates (e.g. `%%term%% %%sep%% %%sitename%%`)
   and term-level sitemap control.

**Built for compatibility**

If Yoast SEO, Rank Math, All in One SEO, SEOPress or The SEO Framework is active,
Assist SEO detects it and does not print competing metadata. You can override this
from the Advanced tab once you have disabled the other plugin’s output.

This plugin does not make guarantees about search rankings. No plugin can. It gives
you correct, well-formed metadata and the controls to manage it; rankings depend
on your content and many factors outside any plugin’s control.

## Installation

 1. Upload the `assist-seo` folder to `/wp-content/plugins/`, or install the plugin
    through the **Plugins** screen in WordPress.
 2. Activate the plugin through the **Plugins** screen.
 3. Go to **Assist SEO  Search Appearance** to set your title separator, title templates
    and social defaults.
 4. Edit any post or page and use the **Assist SEO** box to set a custom title, description
    or visibility.

## FAQ

### Does this work alongside Yoast or Rank Math?

It will not conflict. When another major SEO plugin is active, Assist SEO detects
it and stays silent in the page head to avoid duplicate tags. Run one SEO plugin
as your source of truth; if you want Assist SEO to take over, disable the other 
plugin’s meta output first, then enable “Force metadata output” in Assist SEO’s 
Advanced settings.

### Will this improve my rankings?

Assist SEO makes sure your titles, descriptions, canonicals, robots rules and social
tags are correct and well-formed, which is the foundation good SEO is built on. 
It does not and cannot promise ranking changes — that depends on your content and
competition.

### Does it slow down my site?

No plugin CSS or JavaScript is loaded on the front end. On the back end, scripts
and styles load only on Assist SEO’s own screens and on the post editor. The dashboard’s
content statistics are cached.

### What happens to my data if I uninstall?

Nothing is deleted by default. If you want a clean removal, enable “Delete all Assist
SEO data” in the Advanced tab before deleting the plugin. Your posts and content
are never touched.

### How do I show breadcrumbs?

Enable them under Assist SEO  Search Appearance  Breadcrumbs, then either turn on
automatic insertion, add the `[assist_seo_breadcrumbs]` shortcode where you want
them, or call `assist_seo_breadcrumbs();` in your theme template. The matching BreadcrumbList
schema is output automatically when breadcrumbs are enabled.

### Does it output structured data (schema)?

Yes. Assist SEO outputs a connected JSON-LD graph describing your site, the current
page, your organization or person, and articles, so search engines can understand
your content. Your identity and logo come from the Social tab. Advanced users can
add custom JSON-LD, and each post can override its schema type. If another SEO plugin
is active, Assist SEO does not output schema, to avoid duplicates.

### Does the content analysis tell me if I’ll rank?

No — and be wary of any tool that claims to. The analysis checks concrete, controllable
things: whether your title and description are a sensible length, whether your focus
keyword appears naturally in key places, whether your content has subheadings and
alt text, and so on. It reports Good / Needs attention / Problem for each. It deliberately
does not chase a keyword-density number or promise ranking changes; write for your
reader first.

### How do redirects work, and are they fast?

Add a redirect under Assist SEO  Redirects: enter the old path, the destination,
and a type (301, 302, 307, 308, or 410 Gone). You can use a regular expression for
the source and a back-reference in the destination. On the front end, Assist SEO
checks incoming requests against your redirects using an indexed lookup for exact
matches plus a cached set of any regular-expression rules, so it does not run an
expensive query on every page load. Redirect loops and unsafe destinations (such
as protocol-relative or `javascript:` URLs) are blocked automatically.

### What does the 404 monitor store, and is it private?

The 404 monitor records the paths of not-found requests, how many times each was
hit, and when it was first and last seen — so you can find broken links and fix 
them with a redirect. Repeat hits on the same path increment a counter rather than
creating new rows, and a retention cap removes the oldest entries once the limit
is reached, so the log stays bounded. It never stores IP addresses. Referrers are
optional and, when stored, are reduced to the host and path only (no query strings);
you can turn referrer storage off completely on the 404 Monitor settings.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Assist SEO” is open source software. The following people have contributed to this
plugin.

Contributors

 *   [ AssistPress ](https://profiles.wordpress.org/assistpress/)

[Translate “Assist SEO” into your language.](https://translate.wordpress.org/projects/wp-plugins/assist-seo)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/assist-seo/), check
out the [SVN repository](https://plugins.svn.wordpress.org/assist-seo/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/assist-seo/) by 
[RSS](https://plugins.trac.wordpress.org/log/assist-seo/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.1

 * Dedicated Gutenberg sidebar (ships as source — see the build note below): a document
   sidebar named “Assist SEO” for the block editor, with the SEO fields (title, 
   meta description, focus keyword, canonical, noindex, nofollow, sitemap exclusion),
   Google and social previews, Open Graph / X fields with WordPress media-library
   selection, the full schema editor (all rich types, repeatable fields with add/
   remove / reorder, a live valid / needs-attention status and JSON-LD preview) 
   and live content analysis. It edits the SAME registered post meta and the SAME
   per-type schema store as the classic meta box — no duplicate storage and no duplicated
   SEO, schema, validation or analysis logic — and derives its schema fields from
   a server-provided representation of the schema model. It appears only on post
   types where Assist SEO is enabled.
 * Editor plumbing for the sidebar: the per-content schema-data meta (`_assist_seo_schema_data`)
   is now exposed to the REST API (authenticated, capability-checked, sanitised 
   through the same schema sanitiser as the meta box), and a new `assist-seo/v1/
   schema-preview` REST endpoint validates schema data and returns the generated
   JSON-LD by reusing the existing builders. The schema-data sanitiser is now a 
   single shared class used by both the meta box and REST.
 * BUILD REQUIREMENT: the sidebar is written in React and must be compiled once 
   with `npm install && npm run build` (which produces build/index.js and build/
   index.css). Until it is built, the plugin enqueues no editor bundle and the classic
   meta box — which has the same fields, including the full schema editor — remains
   the block-editor experience. This production build was NOT run in the packaging
   environment (its build toolchain was unavailable there) and the sidebar has NOT
   yet been browser-tested; please build and verify it on your site. Everything 
   else in this release works without any build step.
 * Code quality (WordPress Plugin Check): added “translators:” comments to placeholder
   strings; corrected prepared-statement, direct-query and output-escaping annotations
   on the plugin’s internal database queries (redirects, 404 log, internal links,
   orphan finder); unslashed and sanitised admin list-table request values; set `
   suppress_filters` to false on internal queries; annotated the core `wp_sitemaps_enabled`
   filter read; and prefixed uninstall globals. No behavioural change.
 * Setup Wizard: a polished first-run wizard (site type, identity, search appearance,
   search-engine verification, sitemap, integrations, migration, completion) that
   configures Assist SEO’s existing settings without creating a second settings 
   store. It pre-fills current values and writes only what you change, so reopening
   or completing it never resets anything; it appears once after activation (never
   on every login) and can be reopened from Assist SEO  Setup Wizard. Integrations
   and migration show their real, not-yet-implemented status rather than a fake “
   connected” state. Adds site-type storage, social-profile URLs (fed into schema
   sameAs) and optional search-engine verification meta output.
 * Schema UI: the extended schema types are now configurable per content. The SEO
   meta box (which also appears in the block editor) offers a schema-type selector—
   Automatic, None, Article, BlogPosting, WebPage and the nine rich types — and 
   reveals the fields for the chosen type, including repeatable editors for FAQ 
   pairs, How-to steps, ingredients, instructions, opening hours and social profiles(
   add / remove / reorder). A preview shows the type, a valid / needs-attention 
   status and the generated JSON-LD. Data is stored per type so switching types 
   never destroys what you entered for another, only genuinely-entered values are
   output, and nothing is fabricated.
 * Extended schema types: dedicated, independently-testable builders for Product,
   FAQPage, HowTo, LocalBusiness, Event, Recipe, SoftwareApplication, VideoObject
   and Course, plus an extensible type registry so developers can add their own 
   types via the `assist_seo_register_schema_types` action. Rich types integrate
   with the existing JSON-LD graph (connected to the page’s WebPage node) and replace
   the default Article node so the two are never duplicated. Builders emit only 
   properties that genuinely exist and validate required fields before output — 
   no fabricated prices, ratings, dates or other values, and never any malformed
   JSON-LD.
 * New developer hooks: `assist_seo_register_schema_types`, `assist_seo_schema_node_data`.

#### 1.5.1

Bug-fix release addressing three issues found on a live site:

 * Fixed a fatal error when opening Assist SEO  Internal Links. The submenu referenced
   a render callback (`render_internal_links`) that was missing from the menu class;
   the method has been restored so the callback is valid. A regression test now 
   verifies every Assist SEO submenu callback resolves to a real method.
 * Fixed breadcrumbs displaying vertically on the front end. The plugin was not 
   enqueuing any front-end stylesheet, so the breadcrumb list fell back to the theme’s
   default list layout. A small, scoped front-end stylesheet is now loaded that 
   lays the breadcrumb list out horizontally (flex, wrapping on small screens) without
   affecting other page elements. A regression test verifies the horizontal layout
   is present.
 * Fixed a “translation loading triggered too early” (`_load_textdomain_just_in_time`)
   notice on WordPress 6.7+. Two default settings evaluated translation functions
   while defaults were first read during bootstrap (before `init`). Those defaults
   are now stored untranslated and translated at render time instead. A regression
   test verifies the defaults perform no translation.

#### 1.5.0

This release adds three major features and a plugin-wide interface polish:

 * Global UI polish: a shared, scoped design system (design tokens, page headers,
   cards, stat tiles, status badges, progress, tables and empty states) so the screens
   read as one product, plus reduced-motion support, responsive filter toolbars 
   and small-screen handling for the plugin’s own tables. A redesigned Dashboard
   header and a Quick Actions section.
 * Orphan Content: a new Orphan Content screen listing published, indexable content
   that has no incoming internal links from other indexed content. It reads the 
   internal-link index directly (one indexed query, paginated — no full-site scan
   and no per-row lookups), with summary counts, a restrained by-type distribution,
   related-content suggestions per item, search, post-type and month filters, sorting
   and a positive empty state. It excludes the homepage/posts page, drafts, pending,
   private and password-protected content, noindex and sitemap-excluded content,
   and anything outside the SEO-enabled indexable post types; the rules are filterable.
 * New filters: `assist_seo_orphan_post_types`, `assist_seo_orphan_excluded_ids`.
 * Internal Linking: a new Internal Links screen that indexes how your content links
   together. It records internal links in a dedicated, indexed table, builds the
   index incrementally with a real progress bar (start, rebuild, cancel, last-scan
   time, item count and error count — never faked), and keeps itself up to date 
   when content is saved, trashed or deleted. Includes a content link-profile report(
   incoming/outgoing counts, search, pagination) and a link-opportunities list that
   suggests related content a post does not yet link to. Nothing modifies your content.
 * Link handling normalises URLs before comparison (scheme, host, port, trailing
   slash, duplicate slashes, query, fragment, relative resolution) and classifies
   each link as internal, external or ignored (mailto, tel, anchor-only, unsupported
   schemes, malformed).
 * New filters: `assist_seo_indexable_post_types`, `assist_seo_related_content`,`
   assist_seo_internal_link_opportunities`.
 * Custom Post Type SEO: a Post Type SEO settings screen that discovers public custom
   post types and lets you enable/disable SEO, set default title and meta-description
   templates, choose a default schema type, and toggle sitemap, breadcrumbs and 
   social per type. Posts and pages stay under Search Appearance.
 * CPT frontend output reuses the existing engine with the precedence per-content
   override  post-type default  global default; disabling SEO for a type stops all
   metadata for it, and disabling its sitemap removes it from the sitemap. The meta
   box and REST fields appear automatically for supported types.
 * New `assist_seo_supported_post_types` filter.
 * Taxonomy SEO: per-term SEO title, meta description, canonical, robots, Open Graph
   fields and sitemap exclusion for categories, tags and public custom taxonomies,
   on the term-edit screens.
 * CPT frontend output reuses the existing engine with the precedence per-content
   override  post-type default  global default; disabling SEO for a type stops all
   metadata for it, and disabling its sitemap removes it from the sitemap. The meta
   box and REST fields appear automatically for supported types.
 * New `assist_seo_supported_post_types` filter.
 * Taxonomy SEO: per-term SEO title, meta description, canonical, robots, Open Graph
   fields and sitemap exclusion for categories, tags and public custom taxonomies,
   on the term-edit screens.
 * Term archives now output the resolved title, meta description, canonical, robots,
   Open Graph and Twitter tags, honouring per-term overrides and taxonomy title 
   templates.
 * New taxonomy template variables: `%%term%%`, `%%term_description%%`, `%%description%%`,`%%
   parent%%`, `%%taxonomy%%`.
 * Terms flagged noindex or sitemap-excluded are removed from the taxonomy sitemaps.
 * New `assist_seo_term_meta_taxonomies` filter.

#### 1.4.0

**Features**

 * 404 monitor, backed by its own indexed table: logs not-found requests, deduplicating
   by path with a hit counter and first/last-seen times.
 * Search, active/ignored filtering, per-row ignore and delete, bulk delete/ignore,
   and a one-click “Create redirect” that opens the redirect form with the path 
   pre-filled.
 * A retention cap (default 500 entries) prunes the oldest rows so the log cannot
   grow without bound.
 * Referrer storage is privacy-conscious — reduced to host and path (no query strings),
   stores no IP addresses, and can be disabled entirely.

#### 1.3.0

**Features**

 * Redirect manager, backed by a dedicated indexed database table: create 301, 302,
   307, 308 and 410 redirects with plain or regular-expression sources, notes and
   groups.
 * Add, edit, delete, enable/disable, search and paginate redirects; per-redirect
   hit counter and last-hit time.
 * JSON import and export of redirects, with validated, non-executable import handling.

**Security & performance**

 * Redirect loops are detected and suppressed (a rule whose destination resolves
   back to its source never fires).
 * Destinations are validated to block open-redirect and script-injection vectors(
   protocol-relative URLs, `javascript:`/`data:` schemes, control characters).
 * The front-end lookup uses an indexed exact-match query plus a cached set of regex
   rules, so it never scans the whole table on a request.
 * Every redirect action is capability- and nonce-checked; all output is escaped
   and all queries are prepared.

#### 1.2.0

**Features**

 * Content analysis: a modular set of on-page SEO checks with Good / Needs attention/
   Problem statuses — title and description length, focus keyword in the title, 
   description, URL and introduction, content length, subheadings, image alt text,
   internal and outbound links, and featured image.
 * The classic meta box shows an analysis snapshot of the saved content; the block-
   editor sidebar (source) shows the same analysis live as you type, backed by a
   shared REST endpoint so the checks run once in PHP.
 * New `assist-seo/v1/analysis` REST endpoint, gated on the caller’s ability to 
   edit the post.
 * New `assist_seo_analysis_checks` filter so developers can register their own 
   checks.

**Notes**

 * Analysis guidance is intent-first: it never encourages keyword stuffing and never
   claims a length or keyword count guarantees rankings.

#### 1.1.0

**Features**

 * Structured data: a connected JSON-LD `@graph` (WebSite, WebPage, Organization/
   Person, Article/BlogPosting and BreadcrumbList) with stable `@id` relationships,
   output on the front end.
 * Custom JSON-LD: a validated, sanitised code box for adding your own schema. Invalid
   JSON is never output.
 * Per-post schema type override (Automatic, none, Article, Blog post, News article,
   Web page, About/Contact page).
 * Breadcrumbs: accessible server-rendered trail plus BreadcrumbList schema, via
   the `[assist_seo_breadcrumbs]` shortcode, the `assist_seo_breadcrumbs()` template
   function, or automatic insertion above content.
 * Per-content social overrides: social title, description and image (Open Graph
   and X/Twitter) in the meta box and the block-editor sidebar.
 * Per-content “exclude from XML sitemap” control.
 * Robots.txt additions: append custom directives to the virtual robots.txt.
 * New “Schema” and “Breadcrumbs” settings tabs.

**Improvements**

 * Expanded the block-editor sidebar source with the social, schema and sitemap 
   fields and a live search-result preview.
 * The classic meta box now offers collapsible “Social sharing” and “Advanced” sections,
   with a media picker for social images.
 * Updated compatibility target to WordPress 7.1.

**Security**

 * Custom JSON-LD is decoded and re-encoded with tag/ampersand hex-escaping, so 
   it can never break out of the script element or inject markup.
 * Custom robots.txt content is stripped of HTML and control characters.
 * The new per-post schema type is validated against an allow-list on save.

#### 1.0.0

 * Initial release: title templates and per-post overrides, meta descriptions with
   automatic fallback, canonical URLs, robots directives, Open Graph and Twitter/
   X Cards, WordPress core sitemap integration, dashboard, and a classic/block editor
   meta box with live preview.

## Meta

 *  Version **0.1**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [breadcrumbs](https://wordpress.org/plugins/tags/breadcrumbs/)[meta description](https://wordpress.org/plugins/tags/meta-description/)
   [open graph](https://wordpress.org/plugins/tags/open-graph/)[schema](https://wordpress.org/plugins/tags/schema/)
   [seo](https://wordpress.org/plugins/tags/seo/)
 *  [Advanced View](https://wordpress.org/plugins/assist-seo/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/assist-seo/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/assist-seo/reviews/)

## Contributors

 *   [ AssistPress ](https://profiles.wordpress.org/assistpress/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/assist-seo/)