Nyuchi WordPress Optimization
SEO, metadata, and database cleaning and editing for WordPress. Automates Yoast SEO fields, reports what is costing the database, and exposes both to the REST API and MCP clients.
by Nyuchi Web Services · github.com/nyuchi/auto-seo-manager · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/nyuchi/auto-seo-manager/archive/refs/heads/main.zipSEO, metadata and database maintenance for WordPress sites that have outgrown the effort available to do it by hand.
Version: 1.7.1 | Requires: WordPress 5.0+, PHP 7.4+ | Tested up to: WordPress 7.0 | Releases: GitHub Releases
The repository is
auto-seo-managerand the plugin directory, main file andauto_seo_option prefix still carry that name. The product is called Nyuchi WordPress Optimization; the two names refer to the same thing.
What it is
A single WordPress plugin covering two jobs that usually need several: filling in the SEO metadata nobody has time to write, and finding what has gone wrong in the database and the media library underneath it.
SEO. The plugin writes into the Yoast SEO title, meta description and focus keyword fields only when they have been left empty. Yoast SEO must be installed and active — this writes into Yoast's own fields rather than replacing them. It is not connected to, endorsed by, or affiliated with Team Yoast.
Generating a description from post_content produces nothing useful on a site
built with a page builder, because the readable text lives inside builder data
rather than in the post body. Content is therefore extracted from Elementor and
Beaver Builder layouts, Gutenberg blocks and Advanced Custom Fields. Each
integration is a separate switch, which is also the quickest way to isolate one
when the generated output looks wrong.
Title templates are per post type, with placeholders for the post title, site name and current year. On sites running WP Travel, trip templates additionally accept duration, price, destination and primary activity, and separators around empty placeholders collapse so a trip with no price does not render a stray divider.
Maintenance. Every WordPress site accumulates rows nothing reads any more — meta whose post was deleted, revisions nobody will roll back, transients that expired years ago, and the debris left by plugins that have since been removed. The database module reports what that is costing and cleans it up; a separate editor reads and writes individual values; a third module drops orphaned tables and finds options belonging to plugins that are gone.
The media modules exist because of a specific and recurring failure: an image
optimiser that rewrites files to AVIF or WebP in place without touching the
attachment record, leaving WordPress describing a file that is not there.
media-repair.php reconciles the record with the bytes on disk;
media-convert.php converts attachments back to a format the pipeline will
accept; image-sizes.php restores sizing at the Cloudflare Images delivery
layer after offloading has removed the local sub-sizes.
Automation surfaces. Everything above is reachable without wp-admin. The
REST API lives under the auto-seo/v1 namespace and every route requires
manage_options. The same operations are also registered against the WordPress
Abilities API, so an MCP client can drive the plugin directly.
Install
This plugin is not distributed through wordpress.org.
From a GitHub release (recommended)
- Download the latest ZIP from Releases.
- In wp-admin go to Plugins → Add New → Upload Plugin and upload it.
- Activate the plugin.
- Configure at Settings → Auto SEO Manager.
Once installed, the plugin wires GitHub Releases into WordPress's own update machinery, so later versions appear as a normal "update available" notice.
Manually
git clone https://github.com/nyuchi/auto-seo-manager.git \
wp-content/plugins/auto-seo-manager
Then activate through Plugins in wp-admin.
Install and activate Yoast SEO first. The SEO modules stay inert without it; the database and media modules do not need it.
See installation-guide.md for the longer version.
Usage
Read plugin status over REST:
curl -s "https://example.com/wp-json/auto-seo/v1/status" \
-u "user:application-password"
Run an update for a single post:
curl -s -X POST "https://example.com/wp-json/auto-seo/v1/run" \
-u "user:application-password" \
-H "Content-Type: application/json" \
-d '{"post_id": 123}'
Omit post_id for a site-wide run.
REST routes
All routes require manage_options.
| Method | Route | Purpose |
|---|---|---|
GET |
/wp-json/auto-seo/v1/status |
Version, DB version, master switch, Yoast state, log stats, next scheduled run |
GET |
/wp-json/auto-seo/v1/settings |
Writable settings, plus post_types and title_templates |
POST |
/wp-json/auto-seo/v1/settings |
Write settings; unrecognised keys are returned under ignored |
GET |
/wp-json/auto-seo/v1/logs |
Log statistics and up to limit entries, capped at 500 |
DELETE |
/wp-json/auto-seo/v1/logs |
Purge the log, returning the number of rows removed |
POST |
/wp-json/auto-seo/v1/run |
Run an update, for one post or site-wide |
POST /run returns HTTP 409 and auto_seo_yoast_missing when Yoast SEO is not
active.
Logging
Activity logging has four levels, set through auto_seo_log_level:
| Level | Records |
|---|---|
off |
Nothing |
errors |
Failures only |
actions |
Real SEO changes — the default |
verbose |
Integration start-up as well; for short debugging sessions only |
verbose fires on every request. Left on, it grows quickly: on one production
site the log table reached 1.94 million rows and 295 MB, and was measurably
slowing post saves. A daily prune applies a retention window
(auto_seo_log_retention_days, default 30) and a row cap
(auto_seo_log_max_rows, default 20000) in bounded batches.
Architecture
One file per concern, loaded from auto-seo-manager.php.
| File | Concern |
|---|---|
auto-seo-manager.php |
Plugin header, bootstrap, SEO generation, scheduling |
admin-page.php |
The tabbed admin screen |
integrations.php |
Elementor, Beaver Builder, Gutenberg, ACF, WooCommerce, WP Travel extraction |
abilities.php |
WordPress Abilities API surface, mirroring the REST routes |
database.php |
Database diagnostics and bulk cleanup |
database-editor.php |
Reading, locating and writing individual values |
tables.php |
Dropping orphaned tables; finding options left by removed plugins |
metrics.php |
Site health as numbers — autoload size, cron queue, growth over time |
media-repair.php |
Reconciling attachments whose file and metadata disagree |
media-convert.php |
Converting mismatched attachments back to an ingestible format |
image-sizes.php |
Cloudflare Images sizing after offload removes local sub-sizes |
plugin-manager.php |
Plugin inventory, update checks and updates |
elementor.php |
Elementor page construction from _elementor_data |
updater.php |
Wiring GitHub Releases into the WordPress update machinery |
meta-tags-test.php |
Optional testing utility |
Changelog
See CHANGELOG.md.
Contributing
See CONTRIBUTING.md. Bug reports and feature requests go to Issues.
Licence
Licensed under the GNU General Public License v2 or later; see LICENSE.
© Nyuchi Web Services. Developed by Bryan Fawcett (@bryanfawcett).