docs v3.2 · updated July 2026 · for WordPress 6.2+ back to site →
metasift.
Documentation

Read this first.

From a fresh install to wiring custom schema with filters. Written by the team that ships the plugin.

11 min read 14 sections copy-to-clipboard on every snippet
// 01 — Introduction

# Introduction

Metasift is an SEO toolkit that lives inside WordPress. It replaces the meta box, sitemap generator, schema renderer and rank tracker you currently run as four separate plugins, with a single panel that scores your content against what already ranks.

This guide takes you from a fresh install to a fully configured site in the order most publishers need. Each section stands alone — if you only came here to wire up FAQ schema, jump straight to Schema markup.

New here? Most sites are production-ready after the four-minute setup wizard. Come back to the rest when you need it.

// 02 — Requirements

# Requirements

Metasift is conservative about dependencies. If your site runs a current WordPress, it will run Metasift.

  • WordPress 6.2 or newer (works on the Classic Editor plugin too)
  • PHP 7.4 minimum, 8.1 or newer recommended for faster analysis
  • MySQL 5.7 or MariaDB 10.3+
  • HTTPS — Google indexes the https version; sitemaps and schema assume it
  • A theme that serves srcset on images (core since 5.4) for image sitemaps

On PHP 8.2+, Metasift suppresses the dynamic-property deprecation notice for third-party themes rather than forcing you to patch them.

// 03 — Installation

# Installation

Three ways to install. Use the dashboard upload unless your server blocks zip uploads.

From the dashboard

  1. Download the zip from your account — the file is named metasift-3.2.zip.
  2. Upload it at Plugins ▸ Add New ▸ Upload Plugin, choose the zip, click Install Now.
  3. Activate Metasift from the plugins list. On activation it scans your theme and prints a one-line health check to Metasift ▸ Tools ▸ System status.

Over FTP

Unzip locally and upload the metasift/ folder to /wp-content/plugins/. Make sure the folder is writable by the web server so the sitemap cache can write at runtime.

With WP-CLI

For scripted or multisite installs, use the CLI directly:

bash
wp plugin install metasift-3.2.zip --activate
wp metasift wizard run --business="Cafe" --type=LocalBusiness

Don't keep two SEO plugins active. Metasift detects a second sitemap or meta handler and pauses its own to avoid duplicate output, but you'll lose features. Deactivate the old plugin once the import finishes.

// 04 — License activation

# License activation

Your license key lives at Metasift ▸ Settings ▸ License. Paste the key from your purchase receipt and click Activate. The key is validated once, then stored locally — updates pull from the CDN without phoning home on every page load.

  • Solo — valid on 1 production site plus 1 staging clone
  • Pro — 3 sites, each with its own staging domain
  • Agency — 25 sites, deactivate and move keys freely

Staging domains (those matching .local, .test, staging., .wpengineinst and similar) never count against your limit.

// 05 — Setup wizard

# Setup wizard

After activation, Metasift opens a seven-step wizard. It configures roughly 90% of sites correctly with no manual editing. The steps:

  1. Entity — pick Person, Company or Local Business. Sets the organization schema and the homepage title template.
  2. Social profiles — paste URLs for sameAs. Skip the ones you don't use; they won't render.
  3. Title format — accept the recommended templates or edit. Variables are live, so you see your real homepage title.
  4. Default social image — used when a post has no featured image. Upload once; Metasift crops the sizes Open Graph and Twitter need.
  5. Old plugin import — if Yoast, Rank Math or AIOSEO is detected, the importer runs here and lists what it transferred.
  6. Webmaster verification — paste Google, Bing and Pinterest tokens. Metasift injects them into <head> for you.
  7. First keyword — add one tracked keyword to confirm rank tracking is online. Batch-import the rest later.

Re-run any step from Metasift ▸ Settings ▸ General ▸ Re-run wizard without losing existing settings.

// 06 — Titles & meta

# Titles & meta

Metasift generates titles and meta descriptions from templates per content type, then lets you override any single post in the editor sidebar. Templates use variables wrapped in double braces.

template
{{post_title}} — {{term_1}} guide | {{site_name}}
{{term_1}}, {{term_2}} reviewed for {{current_year}}

Available variables include {{post_title}}, {{site_name}}, {{term_1}} (your focus keyword), {{current_year}}, {{author}}, {{page}} for paginated archives, and {{separator}}, which defaults to an em dash. Title length is validated live against Google's pixel-width truncation, not a character count.

Changing the separator

Filter the separator from your theme's functions.php:

php
add_filter( 'metasift/title_separator', function () {
    return '·';
} );
// 07 — XML sitemaps

# XML sitemaps

Sitemaps are on by default at /metasift-sitemap.xml. Metasift splits them by content type — post-sitemap.xml, page-sitemap.xml, one per custom post type and taxonomy — so large sites never serve a single bloated file.

The <lastmod> value reflects the last time the page actually rendered, not the post_modified column. This matters: editing a typo bumps post_modified but doesn't change the rendered output, and we don't want to tell Google something changed when it didn't.

Excluding content

Use the per-post toggle in the sidebar, or exclude by rule at Metasift ▸ Sitemaps ▸ Rules. For programmatic control:

php
add_filter( 'metasift/sitemap_include_post', function ( $include, $post ) {
    if ( $post->post_type === 'ad_slot' ) {
        return false;
    }
    return $include;
}, 10, 2 );
// 08 — Schema markup

# Schema markup

Schema is output as JSON-LD in the page footer. Metasift assembles a @graph with Organization, WebSite, BreadcrumbList and the content-specific type, then validates the final JSON against Google's Rich Results rules before it reaches the DOM.

Adding a custom type

Say you have a "Course" custom post type. Register its schema with a single filter:

php
add_filter( 'metasift/schema_for_post_type', function ( $schema, $post ) {
    if ( $post->post_type !== 'course' ) {
        return $schema;
    }
    return array(
        '@type'      => 'Course',
        'name'       => get_the_title( $post ),
        'provider'   => array( '@type' => 'Organization', 'name' => get_bloginfo( 'name' ) ),
        'inLanguage' => get_post_meta( $post->ID, 'course_lang', true ) ?: 'en',
    );
}, 10, 2 );

Test the output by appending ?metasift_schema=raw to any URL while logged in as an editor — it prints the JSON-LD @graph for that page so you can paste it straight into Google's Rich Results Test.

FAQ and HowTo blocks render inline schema from their content, so you don't fill the same data twice. Disable a block's schema from its toolbar if you've covered it elsewhere.

// 09 — Content analysis

# Content analysis

Open any post and the Metasift sidebar scores it against the live top ten for your focus keyword. The score is a weighted blend of four pillars, each visible as its own bar:

  • Keyword — placement in title, H1, slug, first 100 words and image alt text
  • Topic coverage — entities present in top-ranking pages, pulled from the current SERP
  • Readability — sentence length, grade level and passive-voice ratio, tuned to your niche
  • Technical — internal link count, outbound authority links, image sizes and heading order

Each check links to the exact paragraph it refers to, so fixing a warning is a click rather than a hunt. The pillar weights are editable at Metasift ▸ Analysis ▸ Scoring if your team weights readability above keyword density.

Analysis runs entirely in your browser while editing — no requests to the server as you type. SERP entity data is fetched once and cached locally for 24 hours.

// 10 — Redirect manager

# Redirect manager

Find it at Metasift ▸ Redirects. Add 301, 302 and 307 redirects, group them, and log every hit. Paths support plain matches, wildcards (/old/*) and full regex.

Two safety nets run before a redirect is saved: a loop detector that rejects A→B→A, and a chain-shortener that rewrites A→B and B→C into A→C automatically. When you rename a post slug, Metasift offers to create a redirect from the old URL in the publish metabox.

regex
source: ^/blog/([0-9]{4})/(.*)$
target: /articles/$2
type:   301 permanent
// 11 — Rank tracking

# Rank tracking

Add keywords at Metasift ▸ Rankings. For each keyword you choose a location, device and search engine. Positions refresh daily; force an update for a single keyword from its row.

Group keywords by the page they target — Metasift suggests a target URL based on your current ranking URL, and flags when a keyword starts ranking for a different page than the one you intended. Connect Search Console at Metasift ▸ Integrations to overlay real impressions and clicks on the same chart.

Tracking consumes your plan's keyword quota. Deleting a keyword frees its slot immediately but keeps its history for 90 days in case you re-add it.

// 12 — Hooks & filters

# Hooks & filters

Metasift is built to be extended without editing plugin files. The most common filters:

php
add_filter( 'metasift/title_separator', '__return_empty_string', 10 );

add_action( 'metasift/after_analysis', function ( $score, $post_id ) {
    if ( $score['total'] < 60 ) {
        error_log( "Post {$post_id} scored {$score['total']} before publish." );
    }
}, 10, 2 );

add_filter( 'metasift/og_image_size', function () {
    return 'social-wide';
} );

Reference

  • metasift/title_separator — string, the title segment separator
  • metasift/meta_description_default — auto-generated description before manual override
  • metasift/sitemap_include_post — boolean per post, exclude with false
  • metasift/schema_for_post_type — array, the JSON-LD payload for a post type
  • metasift/og_image_size — registered image size name used for social previews
  • metasift/analysis_weights — array of pillar weights, must sum to 100
  • metasift/after_analysis — action, receives the score array and post ID
// 13 — WP-CLI

# WP-CLI

Metasift ships a wp metasift namespace for automation and bulk work. Useful commands:

bash
wp metasift sitemap flush              # rebuild + warm the sitemap cache
wp metasift redirect scan              # find changed slugs, add 301s
wp metasift track add "running shoes" --location=US --device=mobile
wp metasift license activate KEY       # activate without the admin UI

Run wp metasift with no arguments for the full list. Every command supports --format=json for piping into other tools.

// 14 — Troubleshooting

# Troubleshooting

The sitemap returns a 404

This is almost always a permalink issue. Visit Settings ▸ Permalinks and click Save once to flush rewrite rules. On nginx, confirm your config passes non-existent files to index.php; Metasift's sitemap is a virtual path, not a real file.

My score doesn't update as I type

Analysis debounces for one second after you stop typing. If it never fires, check the browser console — a syntax-highlighting or minification plugin occasionally strips the inline dependency. The Metasift ▸ Tools ▸ System status screen reports a broken dependency explicitly.

Schema isn't showing in Google's test

First confirm the JSON-LD is in your page source with ?metasift_schema=raw. If it's there but Google rejects it, the validation log at Metasift ▸ Schema ▸ Log names the exact failing property. The most common cause is a required field left empty in a Product or Review block.

Still stuck

Email support with the output of Metasift ▸ Tools ▸ System status attached. Pro and Agency plans get a first reply within one business day; a real engineer reads every ticket.

// was this page helpful? yes no report an issue