# WordPress

> Connect your WordPress site so EOMA can publish the pages, posts and files it writes for you, instead of handing you a file to paste.

Source: https://eoma.ai/docs/integrations/wordpress
Product: EOMA — AI search visibility for brands (https://eoma.ai)
Last updated: 2026-08-24

---
## In 10 seconds

- A site you host yourself takes **three steps**: an Application Password, the EOMA plugin, then the three fields. WordPress.com takes one — you log in and you are done.
- **The plugin is not optional.** Without it, work we publish to an Elementor site reports success and nothing a visitor sees changes.
- WordPress publishes **live**. When you approve, the page is on your site right away.

## Before you start

- You must be the **owner** of the brand in EOMA. Anyone else sees an "Owner only" label
  instead of the Connect button. See [Integrations](/docs/settings/integrations).
- You need a WordPress login with the **Editor** or **Administrator** role. A Contributor or
  Author account cannot publish, and the connection will be refused.
- **To install the plugin you need Administrator specifically.** WordPress only gives
  Administrators the right to install and activate plugins — an Editor can complete the
  connection and then find they cannot do step 2. If your own account is an Editor, ask
  whoever administers the site to do that step.
- WordPress must be reachable from the internet and its REST API must not be blocked.
  Security plugins sometimes block it — the errors below name that case.

## Steps

### 1 — Open Settings → Integrations

Settings is at the bottom of the left sidebar. Inside it, the **Workspace** group holds
**Integrations**.

```
┌─ Settings ─────────────────┬──────────────────────────────────┐
│  WORKSPACE                 │  Publishing — CMS & Sites        │
│    Plan & Usage            │    WordPress      [ Connect ] ←  │
│    Brand Profile           │    GitHub         [ Connect ]    │
│  ● Integrations   ← here   │    Vercel         [ Connect ]    │
└────────────────────────────┴──────────────────────────────────┘
```

Press **Connect** on the WordPress row.

### 2 — Say which kind of WordPress you have

A window called **Connect WordPress** asks you to pick one:

- **WordPress.com (hosted)** — you signed up at wordpress.com and your dashboard lives there.
  Addresses look like `myblog.wordpress.com`, or your own domain pointed at WordPress.com hosting.
- **Self-hosted WordPress** — WordPress was installed on your own hosting, by you or by a developer,
  and the dashboard is at `yoursite.com/wp-admin`. Most business sites are this one.

If you are not sure, open your dashboard and look at the address. `wp-admin` on your own domain
means self-hosted.

### 3a — WordPress.com: log in

Press **Continue to WordPress.com**. You approve the connection on their site and land back in EOMA
with the row connected. Nothing to copy, and no plugin.

### 3b — Self-hosted: create an Application Password

An Application Password is a separate password WordPress generates for one program to use. It is not
your login password, and revoking it does not affect your login.

1. Log in at `yoursite.com/wp-admin`
2. Go to **Users → Profile**
3. Scroll to **Application Passwords**, type the name `EOMA`, press **Add Application Password**
4. Copy the 24-character password it shows, spaces and all

WordPress shows that password **once**. If you close the screen before copying it, generate a new
one — there is no way to read the old one back.

### 3c — Self-hosted: install the EOMA plugin

Still in the EOMA window, under **2. Install the EOMA plugin**:

1. Press **Download the plugin (.zip)**
2. In WordPress admin go to **Plugins → Add Plugin → Upload Plugin**, choose the `.zip` you
   downloaded — do not unzip it — and press **Install Now**
3. When the upload finishes press **Activate Plugin**

```
┌─ WordPress admin ────────────────────────────────────┐
│  Plugins  ▸  Add Plugin      ← the submenu           │
│              [ Upload Plugin ]  ← then this button   │
└──────────────────────────────────────────────────────┘
```

Two things go wrong here often enough to name:

- **Skipping "Upload Plugin".** Without it WordPress only searches its own plugin directory,
  and this plugin is not in it — you will search for "EOMA" and find nothing.
- **Installing and not activating.** Installing copies the files; activating is what turns
  them on. EOMA cannot see an installed-but-inactive plugin.

If an older version is already on the site, choose **Replace current with uploaded** rather than
deleting the old one first. Deleting the plugin from WordPress removes two things with it: the
history EOMA uses to undo its own changes, and the stored content of your `/llms.txt`. Deactivating
the plugin keeps both, so a deactivate-and-reactivate is safe when you are debugging.

### 3d — Self-hosted: enter the two things you collected

Fill **Site URL**, **WordPress username** and **Application Password**, then press **Connect**.
EOMA checks the credentials against your site before saving them.

If the plugin is on the site, the window closes and the row turns connected. If it is not, the
window stays open on **The plugin is not installed yet** — go back to step 3c, then press
**I've installed it, check again**.

## What you'll see

### "Publishing — CMS & Sites"

The group heading in Settings → Integrations, described as *"Where the agent can write pages, posts,
schemas and root files."* WordPress is the first row in it.

### The WordPress row and its "Connect" button

Icon, the name **WordPress**, and a **Connect** button on the right. If you are not the brand owner
the button is replaced by **Owner only**.

### "Connect WordPress" — the two choices

The window described in step 2. Each choice explains itself in two lines, so you can pick without
knowing the word "hosting".

### "1. Create an Application Password in WordPress"

Self-hosted only. The first of three numbered sections, opening with why the password is safe to
give: *"This is NOT your WordPress login password… You can revoke it from WordPress in one click at
any time."* Then the four steps from 3b.

### "2. Install the EOMA plugin"

The second section, and the only one with a warning box around its explanation. It says the plugin
is required whether or not you use Elementor, then gives the download link and the three install
steps.

### "Video for this step"

Under each of the first two sections. A short recording of that step being done in a real WordPress
admin, with no sound — the instructions are written into the picture. **It only appears when EOMA is
set to Turkish**, because the WordPress admin in the recording is Turkish; showing it to an English
speaker would teach them labels their own screen does not have. The written steps are the same in
both languages.

### "3. Enter the two things you just collected"

The last section: Site URL, WordPress username and Application Password. A counter under the
password field tells you whether what you pasted is the right length.

### "The plugin is not installed yet"

The window you land on if the connection works but EOMA cannot find the plugin. It keeps the three
install steps and the video, adds **I've installed it, check again**, and offers **I'll do it later**
if you need to fetch an administrator. Leaving here is allowed — the site is connected either way —
but publishing to it will not do what you expect until the plugin is on.

### The row after it connects

The Connect button is replaced by your site address and a **Disconnect** button. That is the whole
confirmation — there is no separate success screen.

## Reading the numbers

**The counter under the password field — "18/24 chars".** An Application Password is exactly 24
characters, and EOMA counts what you pasted with the spaces removed. Anything under 20 turns orange
and adds *"Application Passwords are 24 characters. This looks too short"* — which nearly always
means you pasted your normal login password. At 24 it turns green and says *"looks right"*. Fix it
here rather than pressing Connect and reading an error.

**The site address shown on the connected row.** The address EOMA will write to. Check it is the one
your visitors use. A staging address here means finished work lands on a site nobody reads.

**What EOMA can send to WordPress.** More than to any other destination:

| What EOMA writes | Lands as | Needs the plugin |
|---|---|---|
| A blog post | A post on your blog | Only if the page is built with Elementor |
| A comparison page, a competitor-answer page, a rewrite of an existing page | A page | Only if the page is built with Elementor |
| Your `llms.txt` file | A file at the root of your site | Yes, always |
| FAQ or organization structured data | A snippet in the page head | Yes, always |

**"Goes live on your site right away".** The line you will see later, when you approve a piece of
work and choose WordPress as its destination. Take it literally: WordPress is a live destination.
The moment you confirm, visitors see the page, and the action closes as done. The
[GitHub](/docs/integrations/github) route is the one that gives you a review step first.

## When it goes wrong

| You see | Why | What to do |
|---|---|---|
| "Owner only" instead of a Connect button | You are not the owner of this brand in EOMA. | Ask the brand owner to connect it. It is a one-time job. |
| "That looks like a regular login password…" | You pasted your WordPress login password. | Go back to Users → Profile → Application Passwords and generate one there. |
| "WordPress doesn't accept email here…" | You typed your email in the username field. | Use the username you type when logging in, not the email address. |
| "Username or Application Password rejected by WordPress." | One of the two is wrong. The username is case-sensitive. | Re-check the username, then generate a fresh Application Password and paste the new one. |
| "Application Passwords are disabled on this WordPress site." | The feature is switched off, usually by a security plugin. | Ask whoever maintains the site to turn it back on. The message in EOMA carries the exact line they need. |
| "Your password is fine — your server is dropping the login header…" | Your hosting strips the Authorization header before WordPress sees it. Nothing you typed is wrong. | Send your host the `.htaccess` line the message shows. Re-generating the password will not help. |
| "WordPress REST API isn't reachable." | A security plugin such as Wordfence is blocking `/wp-json`. | Ask your site maintainer to allow it, then press Connect again. |
| "This WordPress user can't publish posts." | The account is a Contributor or Author. | Use an Editor or Administrator account. |
| "We couldn't reach that site." or "The site took too long to respond (>10s)." | The address is wrong, or the site is down or very slow. | Open the address in a browser. If it loads, try again in a minute. |
| "The plugin is not installed yet" after you installed it | Almost always: uploaded but never activated. | Open Plugins in WordPress. If the "EOMA Companion" row still says **Activate**, press it, then press **I've installed it, check again**. |
| You cannot find **Add Plugin** in WordPress | Your WordPress account is an Editor. Only Administrators may install plugins. | Ask whoever administers the site to do step 3c. The connection itself is already done. |
| The row is connected, work publishes, and the page does not change | The site uses Elementor and the plugin is missing. Elementor stores the page body separately, so a write can succeed and stay invisible. | Install the plugin (step 3c). Then re-publish the action. |
| Everything connects, but nothing is ever published | Connecting gives EOMA somewhere to publish. It does not publish anything on its own. | Approve a piece of work on [Actions](/docs/pages/actions) and pick WordPress as the destination. |

## Related

- [Actions](/docs/pages/actions) — where you approve the work that lands here
- [GitHub](/docs/integrations/github) — the destination that opens a review instead of publishing live
- [Integrations](/docs/settings/integrations) — every connection in one place
