SnippetGrove – AI SEO Metadata

Description

SnippetGrove finds missing SEO metadata and lets you write it into the SEO plugin you
already use. The local audit and manual editor are free and do not require an
account. Optional AI generation uses the WP Shelf service and a separate SnippetGrove
license. SnippetGrove does not replace your SEO plugin’s sitemaps, redirects or schema.

Hosted generation is available with a SnippetGrove license from WP Shelf.
Verify your account email to start a one-time trial of 25 items on one site;
no credit card is required. One successfully generated field is one item, so a
title and description use two items. Additional one-time packs are available
in your account. Local audits and manual editing remain free without an account.
Open WP Shelf SnippetGrove Settings for the trial and sign-in links, then
paste your SnippetGrove license key into the License card.

Start the 25-item trial
Plans and item rules

Implemented:

  • Detection of the active SEO plugin (Yoast SEO, Rank Math, All in One SEO, SEOPress) with a fallback for sites running none
  • Reading and writing SEO titles and meta descriptions through whichever of those is active
  • A coverage audit counting published posts with no meta description or title, per post type, plus images with no alt text
  • The same count for category, tag and product-category archives, on Yoast, Rank Math and SEOPress
  • Bulk AI generation of SEO titles and meta descriptions, planned and costed before a run is dispatched
  • The same for Open Graph and X card titles and descriptions, on Yoast, Rank Math, SEOPress and All in One SEO
  • Bulk AI image alt text, with decorative images detected and left alone
  • Pages you can exclude from generation, with your front page protected by default
  • A review queue with a decision per item, applied into the host SEO plugin’s own fields
  • Rollback of a whole run from a write journal, so a batch you dislike is undoable
  • Admin screens for coverage, the gaps behind every number, and a run, plus REST routes for the same
  • WP-CLI: wp snippetgrove audit, generate, status, apply, revert, export and import
  • A portable configuration file — set SnippetGrove up once, apply it to every site you run
  • Reviewing a run in a spreadsheet: export to CSV, approve or edit in bulk, import the decisions back
  • License activation against the WP Shelf licensing service

Reviewing or applying an existing result does not generate another item.
A service-review pause preserves unused items and existing results. Contact
WP Shelf support, then explicitly retry after the review is complete.

Not included:

  • Per-language metadata via Gloty

Nothing in this plugin claims to influence whether any AI answer engine cites a
site. That is not measurable from inside WordPress and will not be claimed.

What the optional report sends

No usage report is sent unless you enable it in Settings. This is independent
of licensing and generation requests. Its JSON payload contains the product
identifier and the following data:

  • Which SEO plugin is active, and how many others compete with it
  • The number of counted post types, how many published items exist, and how many
    have no SEO title or meta description, as site-wide totals rather than per item
  • How many images exist and how many have no alt text
  • Your WordPress, PHP and SnippetGrove versions, your site’s locale, and whether
    WordPress considers the site production, staging or local
  • A one-way hash identifying this installation, salted with a random value
    generated on your site and never sent. It lets one site’s weekly reports be
    counted as one site; it cannot be turned back into an address

Not included in the usage-report payload: your site address, any e-mail address, any user account, any post,
title, description or other content, and your license key. Turning the setting
off stops the weekly job immediately; uninstalling deletes the salt, so a later
reinstall is a different installation as far as we can tell. As with any HTTPS
request, the receiving server can see your server’s network address; the payload
does not make the connection anonymous.

Why we ask: which SEO plugins are really out there decides which of them gets
fixed first, and the real size of the metadata gap is what the plan sizes have
to be priced against. Both are currently guesses.

Full documentation, including what each coverage number counts and exactly what leaves your site: https://wp-shelf.com/snippetgrove/docs

External services

SnippetGrove cannot generate metadata without an external service, because writing a
meta description is not something WordPress can do locally. This section
describes every external request the plugin makes, what it sends, and when.

The coverage audit and manual metadata editor run locally. License requests
start when you activate a license; generation requests start when you start a
run or separately enable generate-on-publish. Usage reports require their own
opt-in. Installing the plugin alone starts none of these external requests.

1. The WP Shelf service

Generation is performed by the hosted WP Shelf service. The plugin does not
contact AI providers directly; it sends a run’s items to the service, which
selects and calls a provider on your behalf and delivers the results back.

  • Service host: https://gloty-api.wp-shelf.com (overridable by defining the SNIPPETGROVE_SERVICE_URL constant, for example to point at a self-hosted instance).
  • What is sent, for generation: the selected content’s title, excerpt and bounded body text, post type, language, taxonomy terms, author-set focus keyphrase and relevant product attributes, site name and tagline, page URL, requested fields and existing SEO/social values, item and batch identifiers, your site URL and license key. Image-alt requests include the image URL, dimensions and the surrounding title/caption/context so the provider can inspect and describe the image. Developers can customize context with the snippetgrove_generation_context filter.
  • What is sent, for licensing: your license key, site URL, product identifier and, on activation, plugin version. The service records generated-item usage against the license.
  • When: after you start a run or opt into generate-on-publish, while background jobs dispatch batches and poll for their results, and when activating, checking or deactivating a license. Cached license checks can occur when using the admin without starting a run.
  • Who: the WP Shelf service, operated by WP Shelf.

Generation is metered per requested field: generating a title and a description
for one page uses two items. Failed or declined items are not billable; accepting
or rejecting a successful suggestion does not undo the generation cost.
* Terms of service: https://wp-shelf.com/terms
* Privacy policy: https://wp-shelf.com/privacy

The generation implementation passes content to OpenAI. The plugin contacts
WP Shelf, not OpenAI directly; license keys authenticate WP Shelf requests and
are not part of the provider’s generation prompt. OpenAI’s terms apply:

  • OpenAI — https://openai.com/policies/terms-of-use / https://openai.com/policies/privacy-policy

2. Optional usage reporting

Off unless you switch it on, and described under “What the optional report sends”
above. Once enabled, a weekly background request goes to
https://gloty-api.wp-shelf.com/v1/telemetry (or your configured service host),
operated by WP Shelf under the terms and privacy policy above. Its payload has
no content, site URL or license key. Disabling it stops future reports.

Not an external service: to check that your SEO plugin really rendered what
SnippetGrove wrote, the plugin fetches one of your own pages from your own site. This
may pass through your site’s CDN or reverse proxy, but no page content is sent
to WP Shelf or an AI provider by that check.

SnippetGrove does not send analytics or usage tracking anywhere else.

Keeping your data when you uninstall

Deleting the plugin removes everything it stored, which is the right default — a
plugin you have deleted should not leave rows behind. But it also removes your run history and the write journal an undo reads from.

If you are deleting the plugin to troubleshoot and intend to reinstall, add this
to wp-config.php first:

define( 'SNIPPETGROVE_KEEP_DATA', true );

Uninstalling then leaves your data in place, and a reinstall picks it up where it
left off. Remove the line when you want a genuine clean removal.

Security

Found a security issue? Please email hello@wp-shelf.com rather than opening a
public support thread — a forum post is world-readable the moment you send it,
on a plugin installed on other people’s sites. You will get an acknowledgement
within 72 hours, and credit in the changelog unless you would rather not have it.

Source code

Readable JavaScript source is included in src/ and shared-js/, including the shared
WP Shelf packages compiled into build/. The ZIP includes package.json and
webpack.config.js. See shared-js/README.md for rebuilding with Node.js and npm;
no private repository or workspace checkout is required. WordPress supplies the
React and WordPress browser libraries used by the compiled admin interface.

Screenshots

Reviews

There are no reviews for this plugin.

ডেভেলপার এবং কন্ট্রিবিউটর

“SnippetGrove – AI SEO Metadata” is open source software. The following people have contributed to this plugin.

কন্ট্রিবিউটর

Translate “SnippetGrove – AI SEO Metadata” into your language.

ডেভেলপমেন্ট এ আগ্রহী?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

0.59.7

  • Filter large review queues by saved status in the interactive and fallback interfaces, with matching counts and recoverable local drafts.
  • Show review reads as unavailable when the database cannot be read, keeping failed reads distinct from an empty queue.

0.59.6

  • Keep interactive review available on supported older WordPress versions.
  • Keep inline and CSV review decisions tied to the wording actually reviewed; refuse stale decisions and apply only the approved wording shown.
  • Show the current stored value before an explicit override, and refuse overrides when that value cannot be read.
  • Retain unsaved local review text after a competing decision, keep cancelled output read-only, and offer explicit copy-and-recovery steps.
  • Show applied and discarded suggestions read-only, with contextual labels for suggestions that can still be edited.

0.59.5

  • Fix: keep applying recoverable when the saved-suggestion count cannot be read.
  • Fix: applying approved suggestions keeps unreviewed saved suggestions available for a later apply. Earlier writes remain explicitly undoable after review or cancellation.
  • Paused runs with saved suggestions can stop remaining generation and enter review without a refill; approval, apply and undo remain explicit.
  • Quota pauses link to the product account allowance without promising a period reset; saved suggestions remain visible, and service safety pauses never prompt a purchase.
  • Find the free trial directly from Generate, then return to activate its key.
  • Start with five suggested items on a first run and continue from an activated license to generation or product-specific item packs.

0.59.4

  • Save CSV wording edits even when the decision column is blank, and report refused or conflicting rows accurately.
  • Keep run controls, review drafts and action errors attached to the selected run while requests finish out of order.

0.59.3

  • Add product-specific trial signup and sign-in links beside the license field, keeping the selected plugin through account setup and email verification.
  • Explain the 25-item one-time trial, one-site limit, email verification and key connection steps. Local features remain free without an account.

0.59.2

  • Reserve background work within the remaining daily item budget, retain deferred fields and retryable failures, and preserve concurrent publications without expanding the import queue.
  • Materialize runs and items transactionally with verified durable counts, serialize competing creators, and fail closed on budget or active-run read errors.
  • Surface retryable storage failures consistently in REST, CLI and no-JavaScript workflows.

0.59.1

  • Fixed: applying and undoing metadata now check that the selected value was saved before reporting success. An unavailable undo record blocks the write, and interrupted status updates can resume without reporting a conflict against SnippetGrove’s own text.
  • Fixed: changing one metadata field leaves the neighboring title or description untouched. Literal backslashes are preserved in search and social metadata, including undo.
  • Fixed: newest-first missing-description runs now select the newest matching posts instead of the oldest ones.

0.59.0

  • New: on Missing metadata, each box shows how many characters you have typed against the most it should have, with a thin bar beneath it. Too short or too long, it says so in words — “Too short — aim for at least 50 characters”, “5 characters over — search results are likely to cut the end off” — and otherwise stays quiet. The numbers are the same ones a generated title (10–65) or description (50–165) has to meet, and the column header states them. A value outside them still saves. With a screen reader, each box is described by its count, and the screen speaks only when a value becomes long enough, goes over, or falls back under, once you pause typing.
  • Fixed: post titles with an apostrophe, an ampersand or quotation marks showed as code on Missing metadata, the review queue and Activity — Men’s T-Shirt instead of “Men’s T-Shirt”. They now read as they do on the site, and searching Activity for “men’s” finds them.
  • Fixed: on Missing metadata, text typed for a post’s description stayed in that post’s box when you switched the list to titles, and saving then wrote it as the title. Each list now keeps its own text, and switching back finds it where you left it.
  • Fixed: the SEO plugin check on SnippetGrove’s screens said it ran “an unknown time ago” on every site that had run it. It now says how long ago.

0.58.0

  • New: if your license key stops being accepted — for example because we replaced it at your request — Settings License says so and shows where to enter the replacement, and administrators see one notice on SnippetGrove’s other screens pointing there. Before, generation runs failed without saying why. The coverage audit keeps working with no key.
  • Changed: saving on a SnippetGrove settings screen now shows that it is working, then moves keyboard focus to the result, so you — and a screen reader — know at once whether the save worked. A failed save says so in a message you can dismiss, next to the form, instead of a paragraph above it.
  • Fixed: on a SnippetGrove screen opened directly — from a bookmark or a reload rather than through the menu — its interactive parts (confirmations, inline actions) did not start until something redrew the screen. They now work from the first load.
  • Changed: on a site running several WP Shelf plugins, the newest version of the shared admin styles is used, whichever plugin was installed or updated last. Before, updating an older WP Shelf plugin could make every WP Shelf screen fall back to its older styles.

0.57.1

  • No visible change: on a site with no licence key, the plugin no longer reads the licence server’s address on every admin screen that checks licence state. It was one database query per screen whose result could never be used. The shared WP Shelf code now checks for a key first.

0.57.0

  • Added: a No meta description filter on the posts, pages and custom post type lists, beside the SEO metadata column. It turns that column into a work list where quick edit, bulk actions and Generate metadata already are, and costs one extra query per page load however many posts the list holds. Past 500 posts the screen says what it is showing and links to Missing metadata for the rest.
  • Changed: the column links to Missing metadata only for someone who can open that screen. An editor now sees the same words without a link that would have answered “you are not allowed”.

0.56.2

  • Fixed: the coverage figures on a finished run and the trend sentence on SEO coverage counted categories and tags as if they were pages. On a site with a tag list this could report fewer pages with a meta description than before the run — and, with enough tags, a negative number of them — then explain the difference with reasons that had not happened. Pages, categories and tags are now counted separately, and the counts kept from before this release are marked as such rather than re-read as if they had been.

0.56.1

  • Fail a generated item whose result is not text, instead of putting a fragment of program output in the review queue as if it were a description.
  • Say plainly that such a failure is ours to fix rather than showing a raw code.

0.56.0

  • Changed: wp snippetgrove export and wp snippetgrove settings-export now always write to standard output, and the --file option is gone. Redirect to save it: wp snippetgrove export 12 > review.csv. A plugin should not write files to a path of its own choosing, and the shell already does this better.

0.55.1

  • Fixed: generation no longer sends the contents of inline scripts, styles and noscript blocks in a post to the model as if they were page text. A tracking snippet or a style block in a post’s content used to reach the service as prose, costing tokens and muddying the generated title or description.

0.55.0

  • Renamed the plugin to SnippetGrove across its code, data, commands, website, documentation and WordPress.org listing.
  • Retained the complete metadata audit, manual editor, hosted generation, review and undo feature set from the release candidate.

0.54.4

  • Undo every available write in large runs, preserve newer edits, and resume safely after an interrupted undo.
  • Stop generation and scheduled or forced writes if the active SEO plugin changes after selection.
  • Applied X metadata now overrides Rank Math or AIOSEO social inheritance. Undo restores the original setting after both X fields are restored.
  • Undo preserves newer manual edits to metadata and image alt text.
  • Keep partially delivered batches in recovery until missing results arrive or the recovery deadline passes, without resending a smaller batch under a new billing key.
  • Recover interrupted dispatch requests and count overlapping result deliveries only once.
  • Pause for a service review with saved results and an explicit Try again action when generation safety checks require operator attention.
  • Continue recovering older runs with multiple batches in flight without requiring an open admin screen.

0.54.3

  • Match the admin accent to the teal SnippetGrove icon and website.
  • Guide new installations to license settings before creating a hosted generation run. Local audits and manual editing remain free.
  • Show taxonomy coverage in the interactive dashboard, including hosts where it cannot be measured.
  • Stop retrying malformed generation acknowledgements after the normal retry budget, preserving the batch for safe replay.
  • Bound polling when completed jobs cannot return results, while retaining late results that are available.

0.54.2

  • Fixed hosted generation and result polling on fresh installs with no saved server URL.
  • Fixed undo for native metadata and empty fields, plus selection, review and undo of social metadata.
  • Refresh coverage after manual metadata saves so the last fixed gap does not show a stale-count warning.
  • Improved request-input sanitization and documented temporary CSV stream handling.
  • Included shared JavaScript sources and standalone build instructions in the plugin ZIP.
  • Clarified external-service requests and privacy disclosures.
  • Verified clean installation and removal on WordPress 7.1.

0.54.0

  • Added JavaScript search, sorting and pagination for admin data tables.
  • Navigate between plugin subpages asynchronously, with Back/Forward support.

Earlier release notes are included in CHANGELOG.md.