Skip to main content
Semji connects to WordPress through the WordPress REST API (/wp-json/) using an application password. Once connected, Semji’s AI agents can list, read, create, and update posts on your site, update your SEO titles and meta descriptions — whatever your SEO plugin (Yoast SEO, Rank Math, or SEOPress) — and read your categories and tags to file and label articles correctly. Each action can be toggled individually. Compatible from WordPress 5.6.

Prerequisites

  • WordPress 5.6 or newer — application passwords became a core feature in 5.6.
  • A site served over HTTPS and reachable from the public internet. Private or reserved addresses (localhost, 10.x, 192.168.x, …) are rejected.
  • The REST API enabled at https://your-site.com/wp-json/. It is on by default, but some security plugins disable it.
  • A WordPress user allowed to manage posts (Author role or higher — use Editor if agents should be able to update any post).
  • If a firewall, WAF, or anti-bot protection (Cloudflare, Akamai, Sucuri, …) sits in front of your site, it must allow Semji’s IP addresses — see Firewalls, Cloudflare, and IP allowlisting.
  • You are a workspace owner in Semji. The connection is shared with the whole workspace.
Availability of the WordPress integration depends on your Semji plan. If the Connect button opens an upgrade dialog instead of the connection form, contact your account manager.

Step 1 — Create an application password in WordPress

1

Open the user profile

In wp-admin, go to Users → Profile (or Users → All Users and open the account Semji will use).
2

Create the application password

Scroll down to the Application Passwords section, enter a name such as Semji, and click Add New Application Password.
3

Copy the generated password

WordPress displays the password only once, formatted like xxxx xxxx xxxx xxxx xxxx xxxx. Copy it now — you can paste it into Semji with or without the spaces.
Don’t see the Application Passwords section? Your site is either not served over HTTPS, running a WordPress version older than 5.6, or a security plugin has disabled the feature.

Step 2 — Connect from Semji

1

Open the CMS integrations

In Semji, go to Settings → Integrations, open the CMS tab, and click Connect on the WordPress row.
2

Enter your credentials

Fill in the three fields:
  • Site URL — the canonical HTTPS URL of your site, e.g. https://your-site.com. Semji does not follow redirects, so use the exact URL your site resolves to (www vs non-www matters — see troubleshooting).
  • Email or username — the WordPress login or email address of the user who owns the application password. WordPress accepts either: it matches the username first, then falls back to the email address.
  • Application password — the password generated in step 1.
Click Next. Semji tests the connection live by calling GET /wp-json/wp/v2/users/me on your site with these credentials, and detects which SEO plugin your site runs.
3

Pick the WordPress tools

Choose what AI agents can do on your site. All eight tools are enabled by default: Create posts, Read posts, List posts, Update posts, Update meta descriptions, Update SEO titles, List categories, and List tags. You can change this selection at any time later.Update meta descriptions and Update SEO titles may need a prerequisite configuration on your WordPress site to work, depending on your SEO plugin — see Enable SEO title and meta description updates.
4

Activate

Click Activate. The WordPress row now shows as connected.

What Semji can do once connected

Supported SEO plugins

Semji detects your SEO plugin automatically — no configuration to pick a provider. Detection reads the namespaces advertised by your REST API index (/wp-json/), and falls back to inspecting the SEO fields exposed on your posts when a security plugin filters the index. The SEO title and meta description are then read and written through the detected plugin’s own fields:
All in One SEO is not supported. It stores its metadata in a custom database table instead of standard post fields, so it cannot be updated through the WordPress REST API. The SEO update tools report an explicit error on AIOSEO sites; everything else in the integration works normally.
If several SEO plugins are active at the same time (typically during a migration), Semji picks the first supported one in this order: Yoast SEO, then Rank Math, then SEOPress. Deactivate the plugin you no longer use so updates target the one that actually renders your pages.

Enable SEO title and meta description updates

Whether a prerequisite is needed depends on your SEO plugin and its version:
  • Yoast SEO 28.1 and newer — nothing to do. Recent Yoast versions expose their SEO title and meta description fields to the REST API out of the box, and Semji can update them right away.
  • Older Yoast SEO, Rank Math, and SEOPress — these store the SEO title and meta description in protected custom fields that the REST API does not accept writes on by default. A small PHP snippet must register the fields with the REST API first.
There are two equivalent ways to install the snippet — entirely from the WordPress admin with a snippet plugin (no server access needed), or as a must-use plugin file dropped on the server. Pick one. The same snippet covers all three supported SEO plugins and every public post type (posts, pages, and custom post types alike), so it keeps working if you later switch SEO plugins or add content types. Writes remain protected by WordPress permissions: only users allowed to edit posts (the edit_posts capability) can modify the fields — the same permission level as editing the post itself.
Use a snippet plugin such as Code Snippets — it stores the code in the database and runs it on every load, so nothing touches the server’s filesystem.
1

Install the plugin

In wp-admin, go to Plugins → Add New Plugin, search for Code Snippets, then install and activate it.
2

Create the snippet

In the new Snippets menu, click Add New, give the snippet a name such as Semji — SEO fields REST support, and paste the code below. It starts without the opening <?php line — Code Snippets adds it itself.
The snippet detects which of the three plugins is active and only registers that plugin’s fields, so it keeps working if you later switch SEO plugins.
3

Run it everywhere and activate

Keep the scope on Run snippet everywhere — REST API requests must load it too, so do not restrict it to the admin area — then click Save Changes and Activate.
Deactivating the snippet removes the capability.

Verify the fields are exposed

Whichever option you chose, call your REST API with the same credentials Semji uses, on any post ID, checking your plugin’s meta description field (here Rank Math — swap in the field from the table above for Yoast SEO or SEOPress):
A string — even an empty one ("") — means the field is exposed and Semji can update it. null means the code is not running yet.
Without this prerequisite configuration, the Update meta descriptions and Update SEO titles tools fail with an explicit error naming your SEO plugin and the missing field, and change nothing on your site — agents will tell you the field is not exposed rather than pretend the update succeeded. Everything else in the integration works normally.

Manage or disconnect

From Settings → Integrations → CMS, the WordPress row offers:
  • Manage tools — enable or disable each of the eight tools.
  • Disconnect — remove the integration for the whole workspace.

Firewalls, Cloudflare, and IP allowlisting

Semji’s servers call your WordPress REST API directly. If your site sits behind Cloudflare or another WAF, you must allow those calls or the connection will fail. Semji’s servers reach the internet through a fixed set of outbound IP addresses. If a firewall, WAF, or anti-bot protection (Cloudflare, Akamai, Sucuri, …) sits in front of your site, it can block Semji’s requests — typically with a 403 Forbidden — before they ever reach your CMS, even when your credentials are correct. Allow the following Semji IP addresses:
On Cloudflare, create a WAF custom rule with the Skip action matching requests where the source IP is one of the addresses above and the path starts with /wp-json/.
A WAF block is indistinguishable from bad credentials: when a protection layer answers 403 Forbidden on /wp-json/, Semji shows “Invalid WordPress credentials” even though your login and application password are correct. If you are sure of the credentials, check the firewall first.

Troubleshooting

Your site answered 401 or 403. Either the login (email or username) or application password is wrong or was revoked, application passwords are disabled on the site, or — very commonly — a WAF or anti-bot layer (Cloudflare, Wordfence, …) is blocking Semji before the request reaches WordPress. See Firewalls, Cloudflare, and IP allowlisting.
Semji could not complete the request. Frequent causes:
  • The URL redirects. Semji follows no redirects: if https://example.com redirects to https://www.example.com, enter the www URL. Same for HTTP→HTTPS or trailing-path redirects.
  • The REST API is not served/wp-json/ returns 404 (REST API disabled by a plugin, or permalink/rewrite issues on the server).
  • The site is unreachable — DNS failure, host down, or the domain resolves to a private network address.
  • The site is too slow — responses must arrive within 10 seconds.
  • “Please enter a valid URL.” — the value does not parse as a URL.
  • “The site URL must start with https://.” — HTTP sites cannot be connected.
  • “The site URL points to a private or reserved address, which is not allowed.” — localhost and private-network hosts are rejected; the site must be publicly reachable.
  • “WordPress authentication failed. Please check the credentials in the integration settings.” — the application password was revoked or changed since connection. Reconnect with a fresh one.
  • “No WordPress integration configured for this workspace.” — the integration was disconnected; a workspace owner must reconnect it.
  • “No supported SEO plugin detected on this WordPress site…” — Semji found neither Yoast SEO, Rank Math, nor SEOPress on the site. Activate one of them, or if one is already active, apply the prerequisite configuration so its fields are visible through the REST API.
  • “The meta description was NOT saved: this WordPress site runs … but does not expose its meta description field…” (same wording for the SEO title) — the site does not accept REST API writes on your SEO plugin’s field yet. Apply the prerequisite configuration described in Enable SEO title and meta description updates.