> ## Documentation Index
> Fetch the complete documentation index at: https://docs.visibility.so/llms.txt
> Use this file to discover all available pages before exploring further.

# Content and WordPress

> Plan content, write and score drafts in the editor, and publish to WordPress through an Approval in the Inbox.

Every project has a **Content** page for planning and tracking articles, and every content task carries its own editor: a writing surface that autosaves, keeps a version history, scores the draft against a set of SEO checks, and can post the result to your WordPress site as a draft. Publishing is never automatic. Each publish request is decided by a person in the [Inbox](/inbox-and-approvals).

## The Content page

Open a project and click **Content** in the sidebar. The page has three pill sub-tabs:

| Sub-tab      | What it shows                                                                                                |
| ------------ | ------------------------------------------------------------------------------------------------------------ |
| **Tasks**    | Every task in the project whose category is Content, newest-updated first, with labels, priority and status. |
| **Planner**  | A zoomable canvas of topic cards you can link into a tree and turn into tasks.                               |
| **Database** | Your completed content: content tasks whose status is Done.                                                  |

<Frame caption="The Content page with the Tasks sub-tab open">
  <img src="https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/content-tasks.jpg?fit=max&auto=format&n=-1GTvD6OGO5y12MA&q=85&s=05dc7fcad0afedbea4d3f12eb971383c" alt="Content page listing content tasks with label, priority and status badges" width="1568" height="782" data-path="images/content-tasks.jpg" />
</Frame>

<Note>
  If **Content** is missing from a project's sidebar, open the project's **Settings**, choose **Features** and switch on **Content** under **Workflows**. Sub-toggles let you show or hide **Planner**, **Tasks** and **Database**. Only people who can manage the project can change these switches. See [Projects](/projects).
</Note>

### Creating a content task

<Steps>
  <Step title="Open the Tasks sub-tab">
    On the project's **Content** page, click **New content task** in the header (or in the empty state).
  </Step>

  <Step title="Name the task">
    Enter a title. The category is pre-set to Content and the project is already selected.
  </Step>

  <Step title="Optionally import an existing page">
    Paste a URL into **Import content from a URL (optional)**. The page is fetched, converted and placed in the task's editor when the task is created.
  </Step>

  <Step title="Assign and create">
    Assign the task to an agent (for example **SEO Content Writer**) or a teammate, then create it.
  </Step>
</Steps>

Any task becomes a content task when its **Category** is set to Content, either in the New task dialog or through Edit task. Content tasks can also come from the Planner (**Convert to task**) and from [Opportunities](/opportunities) (**Convert to content task**). A content task moves through the normal task statuses; once it reaches Done it appears under **Database**. See [Tasks](/tasks) for statuses, assignment and the discussion thread.

### Planning topics on the Planner

<Steps>
  <Step title="Add topics">
    Open **Content** → **Planner** and click **Add topic**. Type a name; a selected card's title is editable in place.
  </Step>

  <Step title="Link topics into a tree">
    Drag the dot at the bottom of one topic onto another to make it a child. Click a connecting line to unlink. Click **Auto arrange** to lay the tree out tidily.
  </Step>

  <Step title="Move around">
    Drag empty canvas to pan. Scroll to zoom, or use **−**, **+**, the percentage (click it to reset) and **Fit**.
  </Step>

  <Step title="Turn a topic into a task">
    Select a topic and click **Convert to task**. The New task dialog opens prefilled with the topic's title and the Content category. Once created, the card shows **Task created** and offers **Open task**.
  </Step>
</Steps>

Plans save automatically (**Saving…** appears while they do). Use the board menu in the toolbar to create (**New plan…**), rename or delete plans. Each plan is its own canvas, and the last remaining plan cannot be deleted.

## The editor

Open a content task and you land on its **Content** tab. The **Discussion** tab next to it holds the comment thread with the agent. The editor header shows **Content draft** with the current save state on the left, and the actions menu (**…**) plus a **Save** button on the right. The footer shows the word and character count.

### Toolbar

| Group              | Buttons                                                |
| ------------------ | ------------------------------------------------------ |
| Headings           | **Heading 1**, **Heading 2**, **Heading 3**            |
| Emphasis           | **Bold**, **Italic**, **Underline**, **Strikethrough** |
| Blocks             | **Bullet list**, **Numbered list**, **Quote**          |
| Code and structure | **Inline code**, **Code block**, **Divider**           |
| Media              | **Insert/edit link**, **Insert image**                 |
| History            | **Undo**, **Redo**                                     |

Tables and checklists written by an agent render and stay editable, although there is no toolbar button to insert new ones.

### Saving

The draft autosaves about a second after you stop typing. Press **Save** or Ctrl/Cmd+S to save immediately. The header tells you where you stand:

| State                               | Meaning                                                                    |
| ----------------------------------- | -------------------------------------------------------------------------- |
| **Saving…**                         | A save is in flight.                                                       |
| **Saved**                           | Everything is stored.                                                      |
| **Unsaved**                         | You have edits that are not saved yet.                                     |
| **Not saved — press Save to retry** | The last save failed. Your text stays in the editor; click **Save** again. |

If an agent updates the draft while you have no unsaved edits, the editor picks up the new text. It never overwrites what you are typing. Closing the browser tab with unsaved changes prompts you first.

### The actions menu

Click **…** in the editor header. Entries appear only when they apply:

* **Fix SEO score with agent** — when the task has an assigned agent and at least one SEO check is failing.
* **Get keywords** — when an active agent with keyword access is available.
* **Post to WordPress** — when the task's project has a connected WordPress site.
* **Version history** — always available.
* **Pull from URL** — fetch a public web page into the draft. Paste the URL, choose **Replace** (clears the draft) or **Append** (adds below), then click **Fetch**. The page arrives as formatted text with its images.
* **Copy to clipboard**, **Download Markdown (.md)** and **Download plain text (.txt)** — export the article body. SEO fields are not included.

## SEO score and panel

A floating **SEO score** pill sits in the top-right of the editor: a ring with the score out of 100 and a label — **Good** (75 and above), **Fair** (50–74) or **Needs work** (below 50). Click it to open the SEO panel: a sidebar on large screens, or a slide-over sheet titled **SEO** on phones.

### Focus keywords

<Steps>
  <Step title="Add your primary keyword">
    In **Focus keywords**, type a keyword and press Enter (or a comma). The first chip is tagged **1st**: it is the primary keyword and drives the score.
  </Step>

  <Step title="Add secondary keywords if you like">
    Further chips are only checked for presence. They appear in the **Additional keywords** card with an occurrence count or **not used**, and they do not change the score.
  </Step>

  <Step title="Watch the score move">
    Edit the draft and the score, stats and checks update live.
  </Step>
</Steps>

### Reading the panel

From top to bottom the panel shows the focus keyword chips, the **Search preview** with its **Edit snippet** button, a score card (the ring, a letter grade from A to F, a headline such as **Excellent SEO**, **Good SEO** or **Needs work**, and how many checks pass out of the total), a stats grid (**Words**, **Headings**, **Images**, **Links**, **Density**, **Reading ease**), and four collapsible groups: **Basic SEO**, **Additional**, **Title readability** and **Content readability**. Each group says **All passing** or how many items there are to fix, with pass, warn and fail rows and a one-line hint. The group with something to fix opens first.

### What the checks look at

In plain words, the checks ask whether:

* your primary keyword appears in the title, near the start of the title, in the opening of the article, early in the body and anywhere in the body;
* your primary keyword appears in a subheading, in an image's alt text and in the URL slug;
* the article is long enough (at least 600 words);
* the draft has at least one internal link and at least one external link;
* the slug is short (under 75 characters);
* the draft has four or more headings, or a table of contents;
* paragraphs stay concise (under 150 words) and the text reads easily (measured once the draft is long enough);
* the draft includes at least one image or video.

Keyword density is shown for information only and does not affect the score.

### Search preview and snippet editor

The **Search preview** card renders how the post may look in a search result: your site's initial and host, a breadcrumb URL, a blue title and a grey description. It uses the project's domain when one is set; otherwise it shows `yoursite.com`.

<Steps>
  <Step title="Open the snippet editor">
    In the SEO panel, click **Edit snippet** under the search preview. The **Preview snippet editor** dialog shows a live preview above the fields.
  </Step>

  <Step title="Fill in the fields">
    **SEO title** (aim for 50–60 characters), **Permalink** (the slug, 60–75 characters; leave it blank to derive it from the title), **Meta description** (120–160 characters) and **Focus keyword**. The bar under each field is amber when short, green when in range and red when over the limit.
  </Step>

  <Step title="Save">
    Click **Save snippet**.
  </Step>
</Steps>

Blank fields fall back to the task title, a slug derived from the title, and the first 160 characters of the body. These values are also what Visibility sends to WordPress as the post title, slug, excerpt and SEO fields.

## Images

<Steps>
  <Step title="Insert an image">
    Click **Insert image** in the toolbar. Either **Choose file** (PNG, JPEG, WebP or GIF, up to 10 MB each) or paste an image URL, add **Alt text**, and click **Insert**.
  </Step>

  <Step title="Replace, edit or delete it later">
    Click the image. A bubble beneath it shows its alt text (or URL) with two buttons: **Replace or edit image** (upload a new file or change the URL, edit the alt text, then click **Save**) and **Delete image**.
  </Step>
</Steps>

<Tip>
  Alt text is what the image-alt check reads, so put your primary keyword in at least one image's alt text where it fits naturally.
</Tip>

Uploaded files are stored with the task. When you post to WordPress, they are copied into the site's media library.

## Links

Select text and click **Insert/edit link**, then enter the URL (clearing it removes the link). Or place the caret inside an existing link: a bubble shows the URL with **Edit link** and **Remove link**.

Whether a link counts as internal or external is judged against your project's domain:

* A relative link, or a full URL to the project's domain (with or without `www`), is **internal**.
* A URL to any other host is **external**. A subdomain counts as another site.
* If the project has no domain set, every full URL counts as external.

The SEO checks want at least one of each.

## Working with the agent on a draft

### Edit with agent

Ask the assigned agent to change one passage rather than rewrite the whole article.

<Steps>
  <Step title="Select the passage">
    Highlight the text in the editor. An **Edit with agent** button appears at the end of the selection (only when the task has an assigned agent).
  </Step>

  <Step title="Describe the change">
    Click it, type your instruction in **What should the agent change here?**, and click **Send to agent** (or press Ctrl/Cmd+Enter). The passage stays outlined while the panel is open.
  </Step>

  <Step title="Review the result">
    The request is posted to the task's **Discussion** as a comment. The agent edits just that passage and the new version appears in the editor.
  </Step>
</Steps>

Selections longer than 4,000 characters are refused with **That selection is too long to send as a single edit — select a smaller passage.**

### Fix SEO score with agent

Open the actions menu (**…**) and choose **Fix SEO score with agent**. Visibility sends the assigned agent a comment listing every failing check and confirms **Sent to the assigned agent — it will revise the draft**. The entry only appears when the task has an assigned agent and at least one check is not passing.

### Version history and undoing an AI edit

Every draft keeps a history, so an agent's pass never buries your own work.

<Steps>
  <Step title="Open the history">
    Actions menu (**…**) → **Version history**. The left-hand list shows each version with its author (a name, **You** or **Earlier draft**), when it was made, its kind (**Edit**, **AI edit**, **Restored** or **Before history**) and its size. The version identical to your live draft is tagged **Current**.
  </Step>

  <Step title="Compare">
    Click a version to see a diff between it and your current draft on the right, with added and removed lines counted and unchanged stretches collapsed. When an agent has touched the draft, click **Compare the AI's last changes** to see exactly what it changed on its last pass.
  </Step>

  <Step title="Restore or undo">
    Click **Restore this version** (or **Undo the AI's changes**). The earlier text becomes the draft again, and the version you replaced stays in the history, so a restore can itself be undone.
  </Step>
</Steps>

A new version starts after a pause of about 30 seconds or when a different author edits, so autosaves within one editing burst are grouped together. Up to 200 versions are kept per task.

## Connecting WordPress

WordPress is connected per project with the official **Agentic SEO for Visibility** plugin. No WordPress passwords or application passwords are involved: the plugin and Visibility pair through a short code.

<Frame caption="The WordPress card in the project's Integrations settings">
  <img src="https://mintcdn.com/doableteam-a944c448/-1GTvD6OGO5y12MA/images/wordpress.jpg?fit=max&auto=format&n=-1GTvD6OGO5y12MA&q=85&s=f963b56eac7411e4da89e70d5408b6b8" alt="Project Settings Integrations tab showing the WordPress card" width="1568" height="782" data-path="images/wordpress.jpg" />
</Frame>

<Steps>
  <Step title="Install the plugin">
    In your WordPress admin, install and activate **Agentic SEO for Visibility** from the WordPress plugin directory (wordpress.org). It needs WordPress 6.0 or later and PHP 7.4 or later.
  </Step>

  <Step title="Start pairing in Visibility">
    Open the project, go to **Settings** → **Integrations**, and click **Connect** on the **WordPress** card. In the **Connect WordPress** dialog, click **Generate pairing code** and copy the code. It looks like `VIS-A7K9-XB`.
  </Step>

  <Step title="Paste the code into the plugin">
    In WordPress admin, open **Agentic SEO** → **Connection**, paste the code into **Pairing code** and click **Connect**.
  </Step>

  <Step title="Confirm">
    Back in Visibility the card shows a green **Connected** badge with the site name. The plugin's Connection screen shows the Company, Project, when the site was paired and last seen, and the plugin version.
  </Step>
</Steps>

<Note>
  Pairing codes are single-use and expire after 10 minutes. If yours lapses, click **Generate another**. Each project connects to one site; pairing again replaces the previous connection. On a WordPress multisite network, each subsite pairs separately.
</Note>

Connecting or disconnecting requires the **Manage integrations** permission, which company admins have. Without it the **Connect** button is disabled with a tooltip. See [Team management](/team-management) for permissions and [Integrations](/integrations) for the project's other connections.

To disconnect, click **Disconnect** on the WordPress card, or use **Disconnect** on the plugin's **Agentic SEO** → **Connection** screen. Disconnecting removes only the pairing: posts already on the site and your tasks in Visibility are untouched, and you can pair again with a new code at any time.

## Posting to WordPress

Posting from the editor always creates a **draft** on the site, never a live post. Publishing needs an Approval.

<Steps>
  <Step title="Create the draft">
    In the content task's editor, open the actions menu (**…**) and choose **Post to WordPress**. Check the **Title** (it defaults to the SEO title, or else the task title) and the optional **Slug**, then click **Create draft**. You'll see **Draft created on WordPress**.
  </Step>

  <Step title="Read the status box">
    It reports whether the featured image was set (**Featured image set.**) and where the SEO fields went: **SEO fields written to** followed by the plugin name, or a notice that no SEO plugin is installed and Visibility is emitting the tags itself. Warnings appear if an image could not be copied, the featured image failed, or SEO fields were not written.
  </Step>

  <Step title="Schedule, if you want">
    Set **Publish at (optional)** to a future date and time. Times are in your local time zone. Leave it empty to publish as soon as the request is approved.
  </Step>

  <Step title="Request publishing">
    Click **Request publish**. You'll see **Publish requested — an admin approves it from the Inbox** (or **Scheduled for** the chosen date). The post stays a draft on the site until someone approves it.
  </Step>
</Steps>

### What is sent to the site

* The article body, converted to native WordPress blocks so it stays editable in the block editor.
* The post title, slug, excerpt (your meta description), primary focus keyword, SEO title and description, and the social (Open Graph) title, description and image.
* The featured image, taken from the draft's social (Open Graph) image. The site downloads it, so it must be a publicly reachable URL or a path on the site.
* Images you uploaded in the editor, copied into the site's media library: the first 8 images in a draft. Images that are already public are left where they are. Images whose URL no longer exists are removed and reported.

## Approving a publish request

Every publish, whether requested by a person or an agent and whether immediate or scheduled, creates a **WordPress publish** Approval. Approving it is what publishes the post; rejecting it leaves the post a draft on the site.

<Steps>
  <Step title="Open the Approval">
    Go to **Inbox** → **Approvals**. The notification **Approval needed: a WordPress publish** links straight there.
  </Step>

  <Step title="Decide">
    The pending card reads **Publish** followed by the post title and the site. Optionally type a note in **Optional note for the decision…**, then click **Approve** or **Reject**.
  </Step>

  <Step title="What happens next">
    On approve, the post goes live immediately or is scheduled in WordPress for the requested time, and the requester is notified **Approved: a WordPress publish**. If the site refuses, the row reads **Publish failed** with the site's reason and the post stays a draft; admins and the requester get a **Couldn't publish** notification.
  </Step>
</Steps>

Deciding requires the **Decide approvals** permission, which company admins have. Everyone else sees **Pending — an admin will decide on this request.** Resolved items collapse into an accordion below the pending ones. Agents can request publishes but never publish themselves. See [Inbox and approvals](/inbox-and-approvals).

<Warning>
  A scheduled time that has already passed by the time the request is approved publishes immediately on approval.
</Warning>

## SEO plugins on your site

When Visibility writes a post's SEO fields, the plugin looks for an SEO plugin on the site and hands the fields to it.

| On the site        | What Visibility does                                                                                                                                 |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Yoast SEO**      | Writes every SEO field Visibility sends, including Open Graph and robots settings.                                                                   |
| **Rank Math**      | Writes every SEO field Visibility sends, including Open Graph and robots settings.                                                                   |
| **All in One SEO** | Writes the SEO title, description, focus keyword and canonical only. Open Graph and robots settings are not written.                                 |
| No SEO plugin      | The Visibility plugin stores the fields itself and outputs the meta description, Open Graph tags, canonical, robots and structured data on the page. |

The plugin's **Connection** screen tells you which case applies: either **No SEO plugin detected** or a note that SEO tags are managed by the named plugin. If you install an SEO plugin later, the Visibility plugin hands over to it and stops emitting its own tags.

## Agents that work on content

* **SEO Content Writer** — briefs, drafts and optimises content, and can post to WordPress.
* **WordPress Agent** — turns finished content into drafts and requests publishes. It can only be assigned to projects with a connected WordPress site.

For either to touch your site, the agent needs the **WordPress** access grant, labelled **Publish to WordPress. Always also gated by the publish approval.** A person still approves every publish. See [Agents](/agents).
