Overview #
Always On SEO is a WordPress plugin that puts your on-page SEO, technical checks, image optimization and ongoing opportunities in one place.
It gives every page, post and media item the SEO fundamentals it needs, and shows you what to fix next. Free covers the core work. Paid plans add AI writing, Google data, Page Speed, the Blog Engine and monthly reports.
What Free includes Free
- Meta titles, descriptions, canonical URLs and no-index
- Structured data, breadcrumbs, hreflang and social tags
- Image alt text and WebP optimization
- Broken links, redirects and a 404 log
- Header and footer code, llms.txt
- A health score and a 29-point checklist
What paid plans add Paid
- AI titles, descriptions, alt text, FAQs and schema
- Keyword Strategy and competitor research
- Search Console, Analytics and Business Profile
- Real Page Speed scores with history
- Blog Engine and monthly reports
Throughout this documentation, Free marks something every install has, and Paid marks something that needs a license. Agency marks something specific to agencies.
Requirements #
What your website and server need.
| Requirement | Detail |
|---|---|
| WordPress | 6.2 or higher. Tested up to 7.1. |
| PHP | 7.4 or higher. |
| WebP support | For image conversion, WordPress's image library (Imagick or GD) must be able to write WebP. The Image Optimization screen tells you if it cannot. |
| Requests to your own website | Broken-link scans, heading checks and content analysis read your pages the way a visitor does, so your server must be able to request its own addresses. |
| Outbound HTTPS | Paid features talk to our service and to Google over HTTPS. |
| WP-Cron | Daily Google syncs, the monthly report and scheduled blog posts run on WordPress's scheduler. On a very quiet website the real gap between runs can be longer than planned. |
| A public website | Page Speed cannot test local, staging, .test, .local or private-network websites. |
If another SEO plugin is active #
Always On SEO detects Yoast SEO, Rank Math and All in One SEO. To avoid duplicates, when one of them is active this plugin does not output the meta description tag, the canonical override, structured data, breadcrumb data or hreflang tags. Your saved descriptions are passed to Yoast and Rank Math. The title override, no-index and the social (Open Graph and Twitter) tags still run.
Install and first run #
Five minutes from install to a working setup.
- Install. In WordPress, go to Plugins → Add New Plugin, search for Always On SEO, click Install Now, then Activate. You can also upload the plugin's zip file under Plugins → Add New Plugin → Upload Plugin.
- Open it. A new Always On SEO item appears in the WordPress menu. The first screen is the Dashboard.
- Follow the "Get started" card. The top of the Dashboard shows three steps. It disappears when all three are done, and you can hide it with Hide.
The three setup steps #
| Step | What to do | Plan |
|---|---|---|
| 1. Describe your business | Click Add business info and fill in your business name, description and contact details. Everything else, from keyword ideas to schema, is built from this. It counts as done once the description is filled in. | Free |
| 2. Connect Google Search Console | Click Connect Google. Shows the real searches that already find your website. | Paid |
| 3. Research your competitors | Click Research competitors. Finds who competes with you and which topics they cover that you do not. | Paid |
Then fix the basics #
- Open Page SEO. The Missing Meta Tags tab lists pages that have no title or description.
- Fill them in by hand, or on a paid plan use Generate with AI to write them for you.
- Open Image Alt Text and add alt text to the images that have none.
- Work down the SEO Checklist. Each item that needs attention has a button that takes you to the fix.
Where everything is #
| Menu item | What it is for |
|---|---|
| Dashboard | Health score, trends, quick stats, suggested actions and the SEO checklist. |
| Keyword Strategy | Your business details, keywords, competitors, Google data and what to fix next. |
| Page SEO | Titles, descriptions, focus keywords, schema and social tags for every page. |
| Blog Engine | Writes blog posts from your briefs, search data and competitor gaps. |
| Page Content | Thin content, heading structure and duplicate content. |
| Image Alt Text | Alt text and titles for your images. |
| Image Optimization | WebP conversion, savings, restore and unused images. |
| Page Speed | Core Web Vitals scores for mobile and desktop. |
| Broken Links | Broken links, redirected links, orphaned pages and link suggestions. |
| Redirects | Redirects and the 404 log. |
| Header & Footer | Code added to every page. |
| Reports | Monthly reports for you or your clients. |
| Settings | License, AI access, schema, social, breadcrumbs, hreflang and more. |
A separate add-on, Website Copy, adds one more item for writing the copy of a new website. A Projects item appears for agency account keys.
Dashboard #
One screen that says how healthy your SEO is, what changed, and what to do next.
Always On SEO → Dashboard
The top of the screen #
- Refresh reloads the figures straight away. They are otherwise cached for five minutes, and the screen checks for updates every 30 seconds while the tab is open.
- Scan site checks every page for broken links, orphaned pages and unused images, plus one speed test of the home page. See Scan website.
- A banner shows your plan. Paid websites see the plan name, the renewal date and Manage subscription. Free websites see You're on the Free plan with See plans. You can dismiss it.
- Two tabs: Overview and SEO Checklist.
SEO health score #
A number from 0 to 100, calculated from three real measurements:
| Part | Weight | How it is measured |
|---|---|---|
| SEO checklist pass rate | 40% | Checks passing out of 29. |
| Pages with a title and a description | 35% | Pages that have both, out of all pages. |
| Images with alt text | 25% | Images with alt text, out of all images. |
A website with no pages, or no images, scores that part as complete rather than as zero. Pages counted are your public content types in the statuses publish, draft, private, pending and future.
| Score | Label | Message |
|---|---|---|
| 80 or more | Healthy | Your website is well optimized. Keep going! |
| 50 to 79 | Needs work | A few things need attention to reach full health. |
| Under 50 | Needs attention | Your website needs attention. Start with what's flagged below. |
Under the score, a line compares it with the last earlier day, for example "+4 pts since Oct 3", "No change since Oct 3", or "First reading, a trend appears tomorrow".
AI token usage Paid #
Shows how much of your monthly AI allowance this website has used, when it resets, any bonus credits (which never expire), and the real token counts for every AI action. Rows for each provider and model open AI usage history, which you can filter by Today, Last 7 days, Last 30 days, All time or a date range. Free websites see a short explanation and a See plans button instead.
Health trend #
A chart of the score over up to 30 days, with a Show data table. Until there are two days of data it shows what makes the score up instead: Checks passed, Title & description set and Images with alt text, out of 40, 35 and 25 points.
Search readiness #
Four rows covering what search is judged on today. The first two are measured from your website. The last two show readiness only. Whether an answer engine quotes you, or an AI cites you, is not something any tool can report, so nothing here pretends to score it.
| Row | Type | What it shows |
|---|---|---|
| SEO | Measured | The health score, and how many pages still need work. |
| SXO (experience) | Measured | The average Page Speed score across every page checked, and how many pages have heading problems. |
| AEO (answer engines) | Readiness | "FAQ answers on X of Y pages". FAQs are what an answer engine can lift. |
| GEO (AI search) | Readiness | Whether llms.txt is published, and how many authors have credentials set. |
Content health #
Three cards, each with a big number, a change since the previous day (green when a problem count falls), and a bar chart.
| Card | What the number is |
|---|---|
| Pages with issues | Pages missing meta tags or flagged for attention, counted once each. The bars split Missing meta from Needs attention without overlap. |
| Images missing alt text | Media Library images with no alt text. |
| Checks passed | Checklist items passing, out of 29. |
A page needs attention when its title is not between 30 and 55 characters, its description is not between 120 and 160 characters, its title or description is the same as another page's, or the focus keyword's words are missing from its title, description and content.
Quick stats and website performance #
- Quick stats: total pages, total images, redirects, and pages with schema.
- Average page speed Paid: the mean score across every page checked, with Mobile and Desktop panels and a 14-day sparkline. Free websites see "Page Speed checks come with a paid plan."
- Checks by group: how Content, Technical SEO and Accessibility are doing, each as done out of total.
Suggested actions #
Short links to the biggest jobs: pages missing a title or description, other pages needing attention, and images without alt text. Free websites also see "Upgrade to unlock AI features". When there is nothing to do it says "Nothing needs your attention right now."
What needs attention Paid #
Appears once your Search Console and Analytics data has findings. It groups specific opportunities, such as Queries losing ranking, Quick wins, Ranking well, not being clicked, Pages competing with each other, Focus keyword mismatches, Queries with no matching page, Visitors leaving immediately and Your best-performing pages. Each shows "N to look at", and Open Keyword Strategy takes you to the detail. See Opportunities.
Scan website #
Click Scan site to check the whole website in one go. It runs in your browser tab, so keep the tab open. Leaving stops it, and you are warned first.
- Checking links on every page.
- Checking image usage on every page.
- Testing home page speed. Skipped on Free, and skipped when your home page shows your latest posts.
It ends with "Scan finished — N pages checked." A page that times out is skipped and the scan carries on. Stop ends it early.
SEO Checklist #
A live health check of your SEO fundamentals. Every item is checked against your actual website right now, not a static list.
Always On SEO → Dashboard → SEO Checklist
A ring shows how many of the 29 checks pass. Anything marked Needs attention has a button that takes you straight to the fix. A passing item shows a Done pill.
Content (7) #
| Check | Passes when |
|---|---|
| All pages have a meta title | No page of a public type lacks one. |
| All pages have a meta description | No page lacks one. |
| All images have alt text | No Media Library image has empty alt text. |
| No duplicate or poorly-sized meta tags | No page needs attention (title not 30 to 55, description not 120 to 160, duplicates, keyword mismatch). |
| Pages have enough content | No published page is under the word threshold (default 300), ignoring pages that already get Search Console impressions. |
| Focus keywords are reflected in content | No page with a focus keyword is missing that keyword's words from its title, description and content. Pages with no keyword are not penalised. |
| AI features are unlocked | You are on a paid plan. |
Technical SEO (19) #
| Check | Passes when |
|---|---|
| Search Console is connected | You are on a paid plan, Google is connected and a property is chosen. |
| Search engines are allowed to index this website | WordPress's "discourage search engines" option is off. |
| No pages are hidden from search by mistake | No published page is set to no-index. (Check any that are, in case it is deliberate.) |
| robots.txt does not block search engines | There is no "Disallow: /" line, or the website is public. |
| XML sitemap is enabled | WordPress's sitemap is on and the website is public. Passes if another SEO plugin is active. |
| Website uses HTTPS | Your home address starts with https. |
| Permalinks are search-friendly | A custom permalink structure is set. |
| WordPress, plugins and themes are up to date | WordPress knows of no pending core, plugin or theme updates. This only reads that information and never installs anything. If WordPress has not checked yet, it does not pass. |
| Website icon (favicon) is set | A website icon is chosen. |
| Images are optimized as WebP | No images are waiting for conversion. |
| No unused images | After an image-usage scan, no images are outstanding. Images you marked "keep on purpose" are excluded. Not scanned yet counts as not done. |
| llms.txt is present | A real llms.txt file exists, or the plugin's llms.txt is switched on. |
| No broken links | After a link scan, no links are broken. Links that could not be verified are mentioned but do not fail it. |
| Broken URLs have somewhere to go | Every logged 404 has a redirect, or is marked as needing none. |
| Every page is linked from somewhere | After a link scan, no published page is orphaned. |
| Pages load fast enough on mobile | No checked page has a mobile Page Speed score under 50. No checks yet counts as not done. |
| Schema markup is configured | A business description, phone or address is set. Passes if another SEO plugin is active. |
| Privacy Policy page is set | A published page is chosen under WordPress's Privacy settings. |
| Terms of Service page found | A published page matches a search for "terms". This is a best-effort check, because WordPress has no setting for it. |
Accessibility (3) #
| Check | Passes when |
|---|---|
| Headings are structured correctly | No page has more than one H1 or a skipped level (for example H2 straight to H4). |
| Links use descriptive text | No link says "click here", "read more", "here", "learn more", "more", "this link", "click" or "link". |
| Embeds have an accessible title | Every iframe in your content has a title. |
Page SEO Free #
Manage the meta tags of every page in one table. Changes go live as soon as they are saved.
Always On SEO → Page SEO
Tabs and filters #
| Control | What it does |
|---|---|
| Missing Meta Tags | The default view. Pages where the title or the description is empty. |
| All Pages | Every page. |
| Needs Attention (N) | Pages with a problem, with the count. See what counts. |
| All Content Types | Filter by one content type: pages, posts and every public custom type except media. |
| Indexed only | Hides pages set to no-index. It also affects the counts and bulk runs. |
The table lists pages in these statuses: published, draft, private, pending and scheduled. The number of rows per screen follows WordPress's Posts per page setting (up to 100), and you move between screens with the ‹ and › buttons.
The table #
| Column | What it holds |
|---|---|
| Page Name | The title, the slug and a status badge: Title & description complete or Title or description needs attention. |
| Title (55 ch.) | The meta title. Aim for 30 to 55 characters. |
| Description (160 ch.) | The meta description. Aim for 120 to 160 characters. |
| Focus Keyword & Canonical URL | The keyword the page targets, and an optional canonical address. |
| Noindex | A checkbox that asks search engines to leave the page out. |
| ⋮ menu | More actions for the row. See The row menu. |
- Fields save by themselves about a second after you stop typing, with a brief "Saved" flash. There is no Save button.
- The counter reads
n / 55orn / 160and turns red only when you go over the maximum. The minimums (30 and 120) are used by Needs Attention, not by the counter. - If the title field is empty, WordPress's own page title is used on the front end.
- The canonical field is empty by default and shows "Defaults to this page's own URL". The plugin only changes the canonical address when you fill it in.
- The Noindex checkbox saves immediately and adds a no-index instruction on that page.
Focus keyword #
Type in the keyword field and a list of your suggested keywords (from Keyword Strategy) appears, ranked by how well each fits that page, with Matches this page on the ones that already fit. Click an empty field to see the whole list. Nothing is filled in for you.
The list opens downward, or upward when there is no room below it, so the last row's suggestions are always reachable.
Paid The second sparkle button asks AI to suggest focus keywords from that page's own title, slug and content, and shows them in a window titled Suggested focus keywords. Choose one, or close it and type your own.
What "needs attention" means #
| Reason shown | Meaning |
|---|---|
| Title missing | No meta title. |
| Title too short / too long | Under 30 or over 55 characters. |
| Missing meta description | No description. |
| Description too short / too long | Under 120 or over 160 characters. |
| Duplicate title / Duplicate description | The exact same text is used on another page of the selected types. |
| Keyword mismatch | A significant word of the focus keyword is missing from the title, description and content. Small words such as "the", "and" and "for" are ignored. A page with no keyword is not flagged. |
On this tab a page shows its first reason with "+N" for the rest, and the full sentences appear when you hover.
Generate with AI Paid #
The Generate with AI button at the top right writes content for many pages at once. It is shown only to people who have AI access.
| Group | Options |
|---|---|
| Meta tags | Pages missing a tag or Rewrite every page |
| Page schema | Pages with no schema or Rewrite every page |
| FAQ schema | Pages with no FAQ or Rewrite every page |
| Other | Import meta tags from CSV |
- Choose an option. A window asks Generate with AI? and says how many pages it will read and that it uses your AI allowance for each one.
- Click Start. Whatever is generated is saved straight to the live pages.
- Watch the progress ("Generated 12 of 40 (0 failed)…"). Click Stop at any time.
- The summary says how many were generated and how many were skipped because they were already done or had too little text.
- Runs follow your content-type filter and Indexed only. They work in batches of 30, retry once on a failure, and warn you before you leave the tab mid-run.
- A page counts as failed for meta tags only if both the title and the description fail.
- FAQ schema needs a page with at least 80 words of text. Pages that already have FAQs, and pages without enough text to write honest answers from, are left alone.
You can also use the small sparkle button inside any single title or description field to write just that one. It types the text in and saves it, using the focus keyword and your Search Console queries where it has them.
CSV export and import #
Click the ⋮ menu beside the card title.
- Export to CSV downloads
always-on-seo-page-seo.csvfor all pages, with the columns Page Name, URL, Type, Title, Description and No Index. - Import meta tags from CSV is in the Generate with AI menu. The file's first row is skipped. Columns are read by position: the 2nd is the URL, the 4th the title, the 5th the description and the 6th the No Index flag (only
1means no-index). Rows are matched to pages by URL, blank cells overwrite what is there, and unmatched URLs are skipped. It reports "Imported N page(s), skipped M." - The simplest way to edit in bulk is to export, change the file, and import it back unchanged in layout.
Clear Tags from All Pages (in red, in the same menu) removes the meta title, description and no-index setting from every page. It does not touch focus keywords, canonical addresses, social tags or schema. It asks you to confirm and cannot be undone.
The row menu #
| Item | What it does |
|---|---|
| View Page | Opens the page in a new tab. |
| Social Meta (Open Graph) | Set a Social title, Social description and Social image URL (with Choose Image) for shares on social websites. Blank fields fall back to the meta title and description, then the featured image, then the default social image in Settings. |
| Hreflang Alternates | Lists this page's translations as language:address pairs separated by commas, for example es:https://example.com/es/about/, fr:https://example.com/fr/about/. Blank removes them. If WPML or Polylang is active it says they handle this instead. |
| FAQ schema | Add questions and answers. Rows with only half filled in are dropped. See FAQ schema. |
| Product schema | Appears only where it makes sense. See Product schema. |
| Page schema | A JSON editor for the page's structured data. See Page schema. |
| Page Code | Header and footer code for this page only. Needs the manage capability. See Header & Footer. |
Page Content #
Find thin pages, fix heading structure and spot duplicate content.
Always On SEO → Page Content
The left menu has three views: Content Suggestions, Heading Structure and Content Quality.
Content Suggestions #
Lists pages by word count, with Thin Content (the default) and All Pages tabs and a Search pages box. The header says "X of Y pages are thin on content (under N words)". People who can manage settings can change Flag pages under [300] words.
- Columns: Page Name, Word Count, Status (Thin or Good) and a View / Generate Suggestion button. A Suggested pill shows when one is saved.
- The word count counts the words in the page's own content. Content a page builder keeps elsewhere may be missed, so a page can look thin when it is not.
- Paid Generate Suggestion (or Regenerate) proposes two to four sections the page is missing, each with a reason and ready-to-copy text. Use Copy and paste what is useful into the page yourself.
- Paid Refresh from search data improves a suggestion with your Search Console queries for that page or competitor terms. Evidence badges show From your search data, From competitors or Both.
Heading Structure #
Reads each page as a visitor sees it and checks its headings. It scans on your first visit, and Check again repeats it. The table shows the number of H1 to H6 headings and a status. Problems it reports:
- No headings at all
- No H1
- N H1s, when a page should have one
- N skipped levels, for example H2 straight to H4
View outline shows the page's headings as a tree with the issue marked on the heading that causes it. Up to 500 results are kept.
Content Quality (duplicates) Paid #
Click Check All Pages to compare your pages with each other and find ones that are too similar. It compares only your own pages, never the wider web. Each page shows Similar to "…" or No match, and the total says how many duplicates were found. It uses AI for each page, so it only runs when you start it.
Image Alt Text Free #
Add the text that describes each image, for accessibility and for search.
Always On SEO → Image Alt Text
| Tab | What it shows |
|---|---|
| Missing Alt Text | The default view. Images with no alt text. |
| All Images | Every Media Library image. |
| Needs Attention (N) | Alt text that is missing, longer than 125 characters, or identical to the file name. |
| Theme & Custom Images (N) | Images found on your pages that are not in the Media Library and have no alt text. See below. |
| Settings | Opens the Missing Alt Text settings. |
Each image is a card with its thumbnail, file name, the page it is attached to, and two fields, Alt text and Title. Both save by themselves, with a live n ch. counter. The Title shows "· from filename" when it is still the default WordPress made from the file name. Search images finds one by name, and Export to CSV (manage only) downloads Filename, URL, Page Used On and Alt Text.
Generate with AI Paid #
Each field has a sparkle button for one image. The Generate with AI menu does many at once:
- Alt text: Missing alt text only or All images.
- Media library title: Rewrite every title.
It works in batches of 30 with one retry, and there is no confirmation window, so check which option you chose. The AI looks at a small copy of the image when it is a PNG, JPEG, GIF or WebP under 2 MB. Larger images, SVGs and images stored off-site are described from text alone. Alt text is kept to 125 characters and titles to 60.
Theme & Custom Images #
Some images, such as a logo that is part of your theme, are not in the Media Library. This tab lists the ones found on your pages that have no alt text, and lets you write it once. It fills in as visitors load your pages (up to 200 are tracked), and it needs the Fill in missing alt text on the front end setting turned on. Saved text applies to that file wherever it appears.
Filling in alt text automatically #
Settings → Missing Alt Text
Turn on Fill in missing alt text on the front end to show alt text you have already saved wherever a page's image has none. It never makes text up from file names, and it skips decorative images. Also add the Media Library title as a title attribute adds the title as a tooltip, skipping titles that are still just the file name. Both settings need Save Settings.
Structured data and tags Free #
What the plugin adds to the head of your pages, and how to control it.
Titles, descriptions, robots and canonical #
- Title: your meta title replaces the page title.
- Description: your meta description is added as a tag.
- Robots: a no-index instruction on single pages you marked no-index.
- Canonical: only when you set one. Otherwise WordPress's own is used.
Social sharing tags #
On single pages the plugin outputs Open Graph tags (type, title, address, website name, description, image) and Twitter card tags (card type, title, description, image). A page uses its own Social Meta values first, then its meta title and description, then the page title. For the image it uses the social image, then the featured image, then the Default social image in Settings. The Twitter card is summary_large_image when there is an image, otherwise summary.
Structured data (JSON-LD) #
One block is added to every page with these parts:
- A business node: Organization, Local Business or both, set under Settings → Schema Markup. The name, description, phone, email and address come from Keyword Strategy.
- A WebSite node with a search action.
- On single pages: FAQ, Product, your own Page schema nodes, and a BlogPosting for posts when "Add Article schema to blog posts" is on. When an author has credentials filled in, the post names them as a person.
Multiple locations
With no locations saved you get one generic business node. Add one or more under Keyword Strategy → Locations and each becomes its own business node with its address, map position and opening hours. The more precise entries replace the single generic listing.
FAQ schema #
From a page's row menu, choose FAQ schema, then Add question for each pair. Rows only half filled are dropped. The window notes that Google stopped showing FAQ rich results in May 2026, but the questions still help answer engines read the page. Paid AI can write them, in bulk or one at a time.
Product schema #
The Product schema row item appears only when it applies: WooCommerce is active, the Show Product schema on every page setting is on, the page is a product or other custom content type, or it already has product data.
| Field | Notes |
|---|---|
| Product name | Required. Without it nothing is saved or published. |
| SKU, Brand | Optional. |
| Price, Currency | Together they publish an offer. If the currency is blank, USD is used. |
| Availability | In stock, out of stock, pre-order, back order or discontinued. |
| Condition | New, used or refurbished. |
| Average rating, Number of reviews | The rating is published only when both are set. |
On a WooCommerce product page, WooCommerce outputs its own product schema and only the brand and condition are merged in.
Page schema Paid for AI #
A JSON editor for any other structured data a page needs. Nothing is published until you save, and invalid JSON is blocked with a message. Leave it blank to remove it. The @context is added for you and each item needs an @type.
With AI the Generate with AI button describes the page's role and chooses a type: the front page becomes a WebPage, a page with "contact" in its title a ContactPage, "about" an AboutPage, and "faq" a QAPage. It never creates a Local Business or Organization, which come from your business details.
Breadcrumbs #
Settings → Breadcrumbs
Turn on Enable breadcrumbs, then place the trail. Nothing appears by itself.
[alwaysonseo_breadcrumbs]
In a theme template use alwaysonseo_breadcrumbs(). A page's trail is its parent pages, a post's is its first category, and so on. It needs at least two levels, the last item is not a link, and breadcrumb structured data is added automatically as a separate block. Options are in Settings reference.
Hreflang #
Settings → Hreflang
Turn on Enable hreflang tags. If WPML or Polylang is active, their language data is used and an x-default entry is added. Otherwise add each page's translations from Hreflang Alternates in the Page SEO row menu. The page's own language is added for you, and tags are only printed when there are at least two entries.
llms.txt #
Settings → llms.txt
An llms.txt file is a plain summary of your website for AI tools. It is a community proposal, and Google has said it does not use it, so treat it as optional.
- Serve an llms.txt file turns it on, at
/llms.txt. Also serve llms-full.txt adds a longer file of up to 50 published pages, leaving out no-index, password-protected and draft pages. - The Content box starts as a draft built from your business details and up to 25 pages. Rebuild from my pages redraws it. Paid Write with AI writes it. Neither saves, so press Save Settings.
- View live opens the file. The file is created on request, so nothing is written to disk.
- If a real
llms.txtfile already exists in your website's root folder, your server serves it instead, and the editor is switched off with a notice.
Preferred Source button #
Adds Google's "preferred source" button, which lets readers choose you in Google's Top Stories. Turn it on under Settings → Preferred Source, then place it with [alwaysonseo_preferred_source], alwaysonseo_preferred_source(), or automatically under every post or every post and page. It loads one Google script, and only on pages where the button shows.
Image Optimization Free #
Converts JPG and PNG images to the smaller WebP format, shows exactly how much each image saved, and lets you put any original back.
Always On SEO → Image Optimization
The screens #
| Tab | What it shows |
|---|---|
| Not Yet Converted | JPG and PNG images waiting to be converted. Each card has a Convert button. Images that WebP would not make smaller do not appear here. |
| Converted | Images already converted. Each card shows the size before and after, how much smaller it is, and a Restore original button. |
| All Images | Everything, converted or not, including images marked Already as small as it gets. |
| Unused Images | Images in your media library that none of your scanned pages use. See Finding unused images. |
| Settings | Opens the Image Optimization settings. See Settings. |
Above the grid, a panel shows three totals for the whole library: Space saved, Average reduction and Images converted. It appears once at least one conversion has a recorded saving.
Converting images #
- Open Image Optimization and stay on Not Yet Converted.
- Click Convert on one image, or Convert All Pending Images to do the whole list.
- Keep the tab open until the progress bar finishes. When it ends it says how many were converted, how much space was saved, and how many were left alone.
Every size WordPress made for the image (thumbnail, medium, large and so on) is converted too. A size that would not shrink stays as it was; WordPress records the format of each size separately, so mixing formats is safe.
"Already as small as it gets" #
Very small icons and images that are already well compressed can come out bigger as WebP. When that happens, the plugin deletes the trial file, leaves your image untouched and marks it Already as small as it gets. It then stops listing it as waiting. If you change a setting, those images get another try.
Restore original Free #
Click Restore original on a converted image, then confirm. The plugin puts the original JPG or PNG back, with all its sizes and its original dimensions, and removes the WebP files.
- It works as long as the original file is still on your server. That needs Keep the original JPG/PNG files on disk after converting to be on, which is the default.
- A WebP file is only deleted if no page, post or setting still points at it by name. Otherwise it is kept so nothing turns into a broken image.
- If the original is gone, the button is not shown and nothing can be restored.
How quality is handled #
Photos and other pictures
Converted at the quality set in WebP quality for photos (default 82). At that level the difference is normally not visible.
Logos, icons and flat graphics
Saved without any loss when that costs little extra size. Otherwise they get a higher quality than the photo setting. A smooth illustration that is several times larger lossless is treated like a photo.
Transparency is preserved. PNGs that use a colour palette, which most logos with a see-through background do, are converted correctly and keep their transparency.
Settings #
Image Optimization → Settings, or Always On SEO → Settings → Image Optimization
| Setting | Default | What it does |
|---|---|---|
| Automatically convert new uploads to WebP | Off | Converts every new JPG or PNG right after it is uploaded. |
| WebP quality for photos (1-100) | 82 | Higher is sharper but larger. 82 is a good default. Logos and flat graphics are handled separately. |
| Keep logos and flat graphics exact | On | Saves logos, icons and diagrams without any loss when that costs little extra size. |
| Maximum image width | Do not resize | Choose 1200, 1600, 1920 or 2560 px. Wider images are scaled down when converted. This is often the biggest saving of all. The original is kept, so a resize can be undone with Restore original. |
| Keep the original JPG/PNG files on disk after converting | On | Needed for Restore original. Turn it off only if disk space matters more than being able to undo. |
Saving these settings clears the "Already as small as it gets" marks, so those images are tried again under the new settings.
Finding unused images #
Open the Unused Images tab and click Scan All Pages for Image Usage. The plugin reads your pages and lists media files none of them use.
- The list is based on the pages scanned so far. The screen says how many of your pages that is. Scan all of them for a complete picture.
- Click Keep on purpose on an image you want to keep, such as a logo used only in an email. It stops being reported. Undo keep reverses it.
- The plugin never deletes images for you. Use the Media Library to delete the ones you are sure about.
The "converted incorrectly" notice #
If you see a red notice saying images were converted incorrectly, they were converted by an older version on a server whose image library could not write WebP. The old files were JPEGs labelled as WebP, which turns see-through areas black.
Click Repair images. For each image the plugin restores the original where it still exists, and otherwise relabels the file with its real type. The notice then reports how many were restored, how many were relabelled, and any that lost transparency for good because the original was gone. Restored images appear under Not Yet Converted; convert them again to get real WebP files.
What your server needs #
Your server must be able to write WebP files. Most current hosts can. If it cannot, the screen shows a message and the buttons are disabled.
- The plugin asks WordPress for an image library that can write WebP and checks the result is a genuine WebP file. If that fails for an image, the image is left untouched and you see a clear error.
- If the message appears, ask your host to enable WebP support in GD or Imagick.
Broken Links Free #
Finds broken and redirected links across your website. It only makes suggestions. Nothing is changed for you.
Always On SEO → Broken Links
Running a scan #
- Click Scan All Pages.
- Keep the tab open while it works through the pages one at a time ("Scanned 12 of 40 pages (0 failed)…").
- When it finishes, review the tabs below.
- It reads the public content types in the statuses published, draft, private, pending and scheduled.
- For published pages it reads the page as a visitor sees it, so links added by a page builder, and links in the header, menu and footer, are included.
- Links to your own pages are checked against your database. Other links are requested directly. Each page has about 45 seconds, and anything not reached is picked up on the next scan.
- Starting a bulk run is a true re-check, not a replay of the last answers.
What the statuses mean #
| Status | Meaning |
|---|---|
| Broken | An internal link that returns an error, or an external link that returns "not found" or "gone" (404 or 410), or a website whose address does not exist. |
| Redirected | The link works, but sends visitors on to a different address first. The suggested fix is Link straight to: the final address. |
| Couldn't verify | Any other external failure: refused connections, timeouts, and websites that block automated checks (LinkedIn and most social websites do). Open the link yourself to confirm. These are not called broken. |
The tabs #
| Tab | What it shows |
|---|---|
| Broken Links | Page, link, status, suggested fix. A broken internal link gets "Link to this instead:" with a matching published page, found by its slug. Otherwise it says there is no suggestion. Buttons: Visit and Edit Page. |
| Detected Redirects | Links that redirect, with the address to link to directly. |
| Couldn't Verify | Links the plugin could not confirm either way. |
| All Issues | Everything above in one list. |
| All Links | For each scanned page: total links, internal and external. Unscanned pages are left out. |
| Orphaned Pages | Published pages that no scanned page links to, reachable only by typing the address. Your home page is excluded. |
| Link Suggestions | Pages that mention another page's focus keyword in their text but do not link to it. See below. |
Link suggestions #
Each row reads: This page… …mentions a keyword …but doesn't link to a page. Click Edit This Page to add the link.
- Only pages with a focus keyword (set in Page SEO) are checked, and the keyword must be at least 6 characters, so suggestions stay specific.
- Matching is plain text, not AI. It lists up to 300 suggestions.
Redirects Free #
Send visitors from an old address to a new one, and see which addresses visitors are reaching by mistake.
Always On SEO → Redirects (needs the manage capability)
Nothing here changes by itself. Every redirect is one you added.
Adding a redirect #
- Under Add a redirect, type the Old URL, for example
/old-page/. After two characters it suggests your published pages. - Type Redirect to: a path such as
/new-page/or a full address, including another website. - Choose the Type and click Add Redirect.
| Type | Meaning |
|---|---|
| 301 | Permanent. The usual choice when a page has moved for good. |
| 302 | Temporary. Search engines keep the old address indexed. |
| 307 | Temporary, strict. The request method is preserved. |
| 308 | Permanent, strict. The request method is preserved. |
- The table All redirects shows the old address, the destination, the type and how many Hits it has had. Use Search redirects… to find one, and Edit or Delete on a row.
- Matching is on the exact path only. The web address, query string and trailing slash are ignored. Patterns and wildcards are not supported.
- A redirect is only used when WordPress would otherwise show a "not found" page. A second redirect for the same address is refused.
Prompts to add a redirect #
- You changed a page's address. After saving a published page whose address changed, a prompt says "This page's URL changed" and offers Add Redirect or Not now. It also appears when you change a slug with Quick Edit.
- You trashed or deleted a page. It is listed under Recently removed pages on the Redirects tab with Create Redirect and Dismiss. The latest 50 are kept.
The 404 log #
Addresses visitors asked for that returned "not found" and have no redirect. Busiest first, because an address hit hundreds of times is a broken link somewhere real, not a typo.
- Log 404s is on by default. When it is off, nothing new is recorded.
- Columns: Requested URL, Hits, Came from (the referring page, or "Typed or unknown"), Last seen.
- Fix copies the address into the Add form. Needs no redirect marks it ignored (and Undo reverses it). Clear fixed removes only entries that already have a redirect.
- The log keeps up to 500 addresses. When it is full, addresses already listed keep counting but new ones are not added. Clear the list to make room.
- Not logged: the home address,
/wp-admin,/wp-json, very long paths, and file types such as images, scripts, fonts, archives and.php.
Worth a look, and automated probes
The log is split into two lists by evidence, not by guessing:
- Worth a look: your own website links to it, another website links to it, or it sits under a real section of your website.
- Automated probes: no referrer, nothing on your website links to it, and it is under no real section. This is the usual signature of security scanners trying stock paths on every website. Nothing here needs fixing; it is shown so the judgement is yours.
Addresses you mark as needing no redirect stay visible and reversible, but they do not count against the checklist item Broken URLs have somewhere to go.
Page Speed Paid #
Real Core Web Vitals scores for mobile and desktop, with history. There is no key to set up.
Always On SEO → Page Speed
On Free, the screen shows a locked card, Page Speed is a paid feature, with See plans.
Checking a page #
- In Test a Page, choose a published page, or type to search. It starts on your home page when you have a static one.
- Click Check this page, or Recheck this page to run it again.
- Wait about half a minute. It tests Mobile and then Desktop through Google's PageSpeed Insights.
Reading the results #
Each device has its own card with a score from 0 to 100 and these figures:
| Measure | What it tells you |
|---|---|
| Score | 90 or more is green, 50 to 89 orange, under 50 red. |
| Largest Contentful Paint | When the biggest element finishes loading. Google ranks on this. |
| Total Blocking Time | How long the page ignored clicks and taps while scripts ran. |
| Cumulative Layout Shift | How much the page jumped around as it loaded. |
| First Contentful Paint, Speed Index, Time to Interactive | When text first appears, how quickly the page visibly fills in, and when it is reliably usable. |
The three headline figures use the same colour as the full list below them, taken from Lighthouse's own rating, so a number never shows two colours.
- What would make this faster lists the fixes Lighthouse estimates would save the most time.
- What real visitors experienced (last 28 days) shows Good, Needs work or Poor from Chrome's real-user data. It appears only when Google has enough traffic data for the page.
- Older checks may not have these detail sections.
History and the report table #
- Score history is a line chart of Mobile against Desktop. It needs at least two checks.
- Recent checks lists the last ten, with Checked, Device, Score, LCP, CLS and TBT.
- Core Web Vitals Report lists every page you have checked: page, type, mobile score, desktop score and when it was last checked. It does not list pages you have not tested, and there is no "check everything" button. Click a row to load that page.
The Dashboard shows the average across all pages checked, and the checklist item Pages load fast enough on mobile fails when any checked page scores under 50 on mobile.
Keyword Strategy #
Tell the plugin about your business once. It turns that, and your real search data, into keywords, competitors and a list of what to fix.
Always On SEO → Keyword Strategy
The left menu has two groups. Your business: Setup, Keyword Tool, Locations and Competitors. Google data: Search Console, Opportunities, Analytics, Business Profile and Changes. The tab you are on is kept in the address, so you can bookmark it.
On Free you can fill in business info and keywords by hand. The Google tabs, competitors and the AI buttons need a paid plan, and a locked card or note says so.
Setup #
The Business Info card holds your Business name, Business description, Phone, Email and Address. These are shared across the whole plugin: schema markup, and the Website Copy add-on, both read from here. Click Save when done.
Generate from Website Content Paid
Reads your published pages (not posts), about 150 words from each, and drafts the description and the contact fields. When Search Console is connected it also reads your top real search queries, only as a guide to the words customers use.
- It fills the business name, description, phone, email and address it finds, and leaves a field blank rather than guess.
- The email and phone are also read directly from the links on your home page and contact page, so a number in your header or footer is found even if it is not in a page's text.
- It never overwrites a field with an empty value, and nothing is saved until you click Save.
- If Search Console is off or expired, or you are on Free, a short note explains what it will and will not read before you continue.
Suggest Keywords Paid
Click Suggest Keywords to get 10 to 15 keyword phrases from your description. They appear as pills you can remove with the ×.
What you're already found for
A panel on the right, built from your last 90 days of Search Console data. It shows only queries with at least 30 impressions, up to 20 per block, with a "Measured" pill, and refreshes after each sync.
| Block | What is in it | Button |
|---|---|---|
| Close to page one | Searches where you rank between about 11th and 20th place, busiest first. The cheapest wins you have. | Set as focus keyword, or Add to keywords if no page matches |
| Demand with no page aimed at it | Searches you appear for that no page uses as its focus keyword. | Add to keywords |
| Ranking well, not in your plan | Searches where you already rank in the top ten that are in neither your focus keywords nor your suggested list. Worth knowing before a rewrite optimises them away. | Add to keywords |
Keyword Tool Paid #
A scratchpad for exploring one topic at a time. Type a Seed keyword or topic and click Find Keywords. It returns 10 to 15 related phrases.
| Column | Meaning |
|---|---|
| Keyword | The phrase. Use Add to put it in your Suggested keywords. |
| You already rank | "Position X" and impressions from the last 90 days, or "Not shown for it yet". |
| Rivals targeting it | "N of your competitors", when you have researched them. |
| Likely intent | Informational, commercial or navigational. This is an AI guess. |
Rows that have real data sort first. These are ideas, not measured search volume or difficulty. No figure for either is shown, because neither can be measured from your own data.
Locations #
Add every address your business works from. With none, your schema is one generic business entry. With one or more, each becomes its own entry, with its address, opening hours and map position.
- Click + Add Location.
- Fill in Location name (required), street address, city, state or region, postcode and country. Phone falls back to your main number when blank.
- Optionally add Latitude and Longitude. Map position is only published when you give both.
- Set the opening hours for each day (the default is 09:00 to 17:00), or tick Closed.
- Click Save Location.
Edit changes a location, and Delete removes it from the structured data on every page.
Competitors Paid #
Click Research competitors (it becomes Research again). In one go it searches the web for up to five businesses that compete with you, using your business name and address (or your description if there is no address), and then reads their pages.
- You need a business name, and an address or a description.
- The list shows each competitor, their website and what they sell. Only businesses with a real source are ever listed.
- To improve results, improve the business details on the Setup tab rather than editing this list.
The gap analysis
Each term competitors build pages around is compared with what Google actually shows for your website last month. Each gap has one fix.
| Section | When a term lands here | Actions |
|---|---|---|
| Start here | Up to three picks that matter most. | |
| Shown but never clicked | You appear for it but get no clicks. Rewrite that page's title and description. | Fix title, Ignore |
| Within reach | You rank 11th to 30th. Improve the page that already ranks, or add the term to your keywords. | Improve page, Add to keywords, Ignore |
| Not visible at all | You have no matching search, or rank worse than 30th. Ordered by how many rivals use it. | Add to keywords, Write a post, Ignore |
| Already ranking | You are in the top ten with clicks. | None |
- Write a post adds a brief to the Blog Engine queue and then shows "In your queue".
- Ignore removes a term that does not describe your business, and it stops counting everywhere. Ignored terms (N) lists them with Restore.
- A Month by month table keeps each month's result. Terms that are only place names are counted, not listed.
- No search volume or difficulty is shown, by design.
Opportunities Paid #
Turns your synced Search Console data into specific pages worth fixing. It is built from your last Sync now (the 28 days ending three days ago), not from the daily refresh, so sync first if it looks out of date.
Each section shows 10 rows, with Show all N. Every row has an Opportunity score from 0 to 100: 45% how many impressions, 35% how close to page one, 20% how far below the typical click rate for that position. A score of 66 or more is high, 33 to 65 middle, and under 33 low. Searches for your own company name are left out, except under Lost ranking.
| Section | A row appears when |
|---|---|
| Quick wins | You rank 4th to 20th with at least 10 impressions. Close enough to page one that a bit more work could move you onto it. |
| Ranking well, low clicks | At least 10 impressions, and the click rate is below half of your own website's average for that position band. It only judges a band when it has enough data to know your normal. |
| Pages competing with each other | The same search shows at least 10 impressions for two or more of your own pages. |
| Demand with no dedicated page | A search no page of yours matches, with at least 20 impressions. |
| Focus keyword may be off | A page has a focus keyword, but none of the searches it appears for contain it. The row shows what it is actually ranking for. |
| Lost ranking | A search with at least 20 impressions in both of the last two 28-day periods whose position got worse by 2 or more. Empty until there is enough stored history. |
The Optimize button Paid
On Quick wins, Low clicks and Focus keyword rows, Optimize sets the page's focus keyword to that search, writes a new title and description with AI, saves them, and adds the keyword to your suggested list. A window Page optimized shows the result with an Undo.
Changes Paid #
A record of every SEO change made to a page, and what happened to its search results afterwards.
- Changes to the SEO title, meta description, focus keyword, canonical URL and no-index of published pages are logged automatically. Edits within three days merge into one entry. Blog Engine rewrites are tagged "Blog engine".
- Columns: Page, Changed, What changed, Result. Remove deletes an entry from the log.
- Log a change records work the plugin cannot see, such as a rewritten page or new internal links. Enter the page's numeric ID, say what you did, and click Log it.
The Result compares 28 days before the change with 28 days starting 5 days after it, so Google has time to recrawl. It needs at least 200 impressions on each side.
| Result shown | Meaning |
|---|---|
| Click-through improved / fell | The click rate moved by 10% or more. |
| No real difference | It moved by less than that. |
| Too soon to tell | Not enough time has passed. The date results arrive is shown. |
| Too little traffic to judge | Under 200 impressions on one side. |
| No Search Console data either side of this change | Nothing was recorded around that date. |
If the page's ranking also moved by 1.5 positions or more, a warning says the result is about position rather than wording.
Google connection Paid #
Connect once and see Search Console, Analytics and Business Profile inside WordPress.
One Google sign-in covers all three. On Free, each tab shows a locked card with See plans.
Connecting #
- Open the Search Console, Analytics or Business Profile tab in Keyword Strategy and click its connect button (for example Connect Google Search Console).
- Sign in on Google's own screen and allow access. You are sent back to your website with "Google account connected."
- Choose a property: a Search Console property, an Analytics property or a Business Profile location. A search box and Refresh list help with long lists. If exactly one Search Console property matches your domain, it is chosen for you.
Disconnect is on the Search Console tab and disconnects all three. Afterwards you pick properties again. It needs the manage capability.
Search Console #
The header shows the property and Last synced. The first visit syncs automatically.
- Sync now pulls the last 28 days (ending three days ago) and refreshes the last seven days of history. A daily job does the history refresh by itself.
- Search history shows how many days are stored, how much space they use, and Keep (3, 6, 12 or 16 months, default 16, which is Google's maximum). Build history collects older months.
The tab is an accordion of sections:
| Section | What it shows |
|---|---|
| Your action list AI | Build my list uses AI credits to turn the data into a short to-do list. It never runs by itself. |
| Performance over time | Ranges of 7, 28, 90, 180 or 365 days, or a custom range up to 366 days. Tiles for Clicks, Impressions, CTR and Avg. position, compared with the previous equal period, plus a daily chart. Lost ranking and Gained ranking list searches that moved 2 or more positions. A comparison is withheld when there is not enough history. |
| Pages | Sort by clicks, impressions, CTR, position, or biggest drop. |
| What happens after the click | Joins Search Console to Analytics with diagnoses such as "Few clicks for its rank" and "Visitors leave fast". Improve opens advice. |
| Where your traffic comes from | Top 25 by device and by country. |
| All search queries | Every query, searchable and sortable, with ranks 4 to 15 highlighted and a "Tracked" pill for your suggested keywords. |
Totals can differ from Search Console's own screen: the plugin counts the queries it tracked, and newer months use Google's full totals.
Analytics (GA4) #
Choose a property, then Sync now (it refreshes the last five days). History can be kept for 3, 6, 12 (default) or 24 months. The plugin adds no tracking code to your website; it only reads data from Analytics.
- Tiles: Organic sessions, Organic users, Engagement rate, Avg. time on site and Key events (only when your property has them).
- Sections: organic sessions per day, organic landing pages, visitors by device, new against returning, visitors by country, and sessions by channel.
- Pages that generate enquiries and Traffic that goes nowhere point out pages that convert well, and pages with at least 30 organic sessions that convert far below your website's own rate.
Business Profile #
Choose a location. There is no Sync button because the data loads live each time you open the tab.
- Profile: phone, category and website.
- Performance, last 28 days: search views, Maps views, calls, direction requests and website clicks.
- Reviews: your average, the count, and the reviewer and rating.
Each part can fail on its own ("aren't available right now") without breaking the others. Google gives new projects no Business Profile quota by default. If you see a quota error, it is a one-time approval Google must grant, not a problem with your connection.
If the connection expires #
When Google stops accepting the connection, every tab shows This site's Google connection has expired… with a Reconnect Google button. Nothing already stored is lost. Cached tabs show the last figures collected, with a notice. Click the button and sign in again; one reconnect fixes all three tabs.
Blog Engine Paid #
Decides what to write or refresh next, and drafts it from your briefs, your search data and your competitors' gaps.
Always On SEO → Blog Engine
The left menu has Refresh a post, Write a new post and a link to Settings. The audit and the queue are free to read. Anything that writes needs a paid plan.
Refresh a post #
Worth rewriting first lists every published post, with the ones most worth fixing first. The score multiplies how many checks the post fails by how much search traffic it gets (last 90 days). It needs no AI, and Check again re-runs it.
| Flag | Meaning |
|---|---|
| Thin | Under 600 words. |
| Reading grade | Outside grades 7 to 9. |
| Few question headings | Under half of the H2s are questions. |
| No meta title / meta description / focus keyword | Missing. |
| Images without alt | One or more. |
| No internal links | The post links to no other page. |
| Not updated in a year | Over 365 days. |
| Overlaps another post | 18% or more of its text is shared with another post on your website. |
Posts published under 21 days ago show "too new for Search Console".
Rewriting a post AI
- Click Rewrite. A window Planning the rewrite shows the proposed title, the target query, the headings, the FAQs it will answer and what changes.
- If another page of yours already ranks in the top ten for that query, a notice warns you. You can still continue.
- Leave Apply straight to the live post unticked to stage the rewrite. The live post is unchanged until you click Apply to the live post.
- The new article is 900 to 1,400 words at a reading grade of 7 to 9. The post's status is never changed and revisions are kept.
- Every cited web address is checked. Broken ones are removed, and ones that block automated checks are kept and marked "blocked, kept".
- The change is logged in Changes as "Blog engine".
Write a new post #
Worth writing next shows the state of automatic publishing, how many posts were published this month, what is next, and the last 20 runs.
- Your own briefs: describe what a post should cover (up to 2,000 characters) and click Add to the queue. Drag to reorder. Each is Waiting, Published or Failed, with Remove.
- Search opportunities: searches you appear for with no page aimed at them (at least 30 impressions). Write a post starts one, and Not for us sets one aside. Your company's own name searches are kept out and counted separately.
- Suggested from your pages: Suggest topics makes eight ideas in one AI call, and Add as brief queues one.
- The create window asks for Category, Author, Add a featured image and Use a stock photo if nothing on this site matches. Click Approve and write the draft.
A post you write by hand from here is always saved as a draft. Its image comes from your own page, then your media library, then a stock photo (credited), and its focus keyword is set to the query.
Automatic publishing #
Settings → Blog Engine
Everything is off by default. When you turn on Write and publish posts automatically, posts are written and published straight away with no one reading them first.
- Most posts per month (1 to 30, default 8) sets the pace: the gap between posts is 30 days divided by that number. The first run is about two days after you switch it on. WordPress's scheduler is visitor-driven, so on a quiet website runs can be later than planned. A warning shows at 12 or more.
- Subjects come in this order: your briefs, then searches you appear for with no page aimed at them (at least 30 impressions, skipping name searches, ignored ones and ones you already rank for), then, if you allow it, subjects at least two competitors cover that you do not. The AI must judge a subject suitable for your business or it is retired, and the reason is logged. When none are left it stops.
- When the monthly limit is reached the run log says "Monthly limit reached."
- If your AI allowance runs out, queued briefs wait for credit. Any other failure marks the brief Failed.
- Also post each published article to Google Business Profile needs Business Profile API quota that Google must approve. Until it does, posting fails and the run log says so. Google removes these posts after seven days.
What is sent for the AI to write
| Action | Sent |
|---|---|
| Rewrite | The title, word count, about five of the page's top search queries, up to 6,000 characters of text, your business description, and up to 12 of your page titles and addresses. |
| New post | The target query and impressions, your business description, and text from your published pages. |
| Suggest topics | Your business name and description, suggested keywords, page text and your 40 latest post titles. |
| Stock photo search | The search words only, to Pexels. |
Reports Paid #
A record of each finished month: what changed, what it earned, and what still needs attention. Email it to your client every month.
Always On SEO → Reports
On Free, you see a locked teaser with the headline clicks, impressions, sessions and health only, and See plans.
When reports are created #
- A daily check looks at whether last month has a report. It freezes it on or after the 5th of the month, because Search Console runs a few days behind. A missed day is caught the next time the website is visited.
- Every report is saved as an unchangeable version. Regenerating writes a new "Version N" and never overwrites the old one.
- Reports are also backed up to your license, shown as Backed up or Not yet backed up. A failed backup retries daily. If a month is missing locally, it is fetched from the backup, so reports survive a move to a new host.
- A month that has not finished cannot be generated. After the 5th, a notice says "[Month] is ready to generate." with Generate now.
The month calendar #
The Latest report card shows the newest month's clicks, impressions and SEO health, with Open report. Below it, Reports by month is a calendar of the year, with year arrows to move between years.
| Cell | Meaning |
|---|---|
| Clicks, or "Report ready" | A report exists. It also shows Backed up or Not yet backed up. |
| Not generated, "Can be generated" | No report yet, but the month can be built from stored data. |
| Not finished yet | The current or a future month. |
| No data this far back | The month is before the earliest data stored (Search Console, Analytics or daily totals). |
Working with several months at once
Tick months, or use Select every month in this year. A line says "N selected · N with a report · N to generate".
| Button | What it does |
|---|---|
| Generate N | Builds the selected months that have no report, oldest first, with progress. If it stops, it says exactly where. |
| Email N | Sends the selected reports to your recipients, one email per month. |
| Export CSV | One row per month. Blank means a figure was never recorded, never a false zero. |
| Combined PDF | Opens a single document with a cover, a summary table, and each month on its own page. Use Print / Save as PDF in your browser. |
| Clear | Unticks everything. |
The CSV includes: month, change in clicks and impressions against the previous month, click-through rate, engagement rate, SEO health, pages needing work, images without alt text, checklist items passing and in total, changes made, pages changed, AI generations, report version and when it was generated.
What is in a report #
- Header: your logo (if branded), website name, month, a health ring, and headline figures: Clicks, Impressions, Sessions (or click-through rate) and Average position.
- Search Console: totals and change against the previous month, a daily chart, Top search terms and Top pages (25 each), and the biggest gains and drops. Totals count tracked search terms, so they can read lower than Search Console's own screen; newer months use Google's full totals.
- Analytics: sessions, users, engagement rate and top landing pages. Users are counted per day, so someone who visits on several days counts more than once.
- SEO health: the last health reading recorded in that month, plus a 12-month trend.
- Page speed: scores as measured when the report was generated, not a monthly average.
- Competitors: terms you already rank for, shown but never clicked, within reach, and not visible at all.
- Still needs attention: pages needing work, pages with no SEO fields, images with no alt text, and checklist items not done. These show the website as it stood when the report was generated.
- Work done this month: how many changes across how many pages, how many AI generations, a bar chart by type of change, and a table of what changed, when and how (Automatic, Manual or Blog rewrite).
Anything not available is said plainly ("Not connected for this month.", "No earlier month to compare against.") and is never shown as zero.
Opening, downloading and regenerating #
The report toolbar has All reports, Email report, Download PDF and Regenerate. Download PDF uses your browser's print-to-PDF, so choose "Save as PDF" in the print window. Reports lay out cleanly for printing.
Emailing reports #
The Email reports card:
- Email each new report automatically sends each month's report once, as soon as it is ready, usually in the first week. It never re-sends a regenerated version.
- Send to takes up to 10 addresses, separated by commas, spaces or new lines. Everyone gets their own copy, so nobody sees the others. You must add at least one address before turning automatic emails on.
- Save saves the settings. Send latest report now sends the latest report to the saved list. Send me a test sends to your own address.
- The line Last email says which month went to how many people, and when.
The email contains the report itself: health score, Search Console figures with month-on-month change, top search terms and pages, work done and what still needs attention. It is a self-contained message with a plain-text version, so a client without a login can read it. It is not a PDF attachment. The subject is "[website or agency name] -- SEO report for [Month Year]".
White-label branding Agency #
Reports and emails can carry your agency's own name, logo, accent colour and footer instead of ours. The branding is set on your account, not inside the plugin, and is saved into each report when it is created, so older reports keep the branding they were made with. The Agency plan includes white-label reports.
Website Copy add-on Add-on Paid #
A separate plugin that writes the copy for a whole new website, section by section, from your business details and keywords.
Always On SEO → Website Copy
The add-on needs Always On SEO to be installed, active and up to date. It uses that plugin's license, AI allowance and business information, and has no license of its own. If Always On SEO is deactivated or too old, the add-on switches itself off and shows a notice.
It is for writing new copy. To improve copy a page already has, use Page Content.
Setup tab #
Saved once, and reused for every page. The phone, email and address are used as they are for your footer contact details, and are never scanned or invented.
Research this business
Four steps, each using what the last found. Nothing is saved to the setup until the final step, and you review it first.
- Read the form. Upload your filled Content Creation form, a PDF or an image, and click Read form.
- Confirm the business. Check online searches the web and keeps only results that publish the same phone number or address.
- Find competitors. Find competitors finds local competitors. Then Read their pages shows which terms they target (the numbers are how many competitors use a term, not rankings).
- Generate. Generate creates the page list from your form and writes the business description. It saves the description if you have none, and otherwise shows both so you choose.
The setup form below holds the Business description (edited on Keyword Strategy), a Writing tone (Professional, Friendly & Approachable, Luxury / Premium, Bold & Confident, Authoritative / Expert, or Custom), and Site navigation, the pages your website needs, with Add Page. Click Save Setup.
Create copy tab #
Choose how the copy gets written:
Write every page from the research
No template needed. Write all pages and Export all as PDF. Pages are shown side by side.
Rewrite an existing template
Reads a theme demo, or your own pages, section by section and replaces the placeholder text while keeping the layout. This is the only route that can publish back to your website.
- For a template, give a Template URL (a live theme demo, never changed), tick This theme is already installed on this site to read your own pages, or describe the sections in instructions.
- Each page shows a status: Resolved, No matching page found or Not scanned yet, with Scan, View and Re-scan.
- A page opens into Section N blocks with Title, Subtitle, Description and Button Label. Use Generate or Regenerate per section, Generate All Sections, Copy and Delete Section.
- For each page it also suggests a slug, a focus keyword, a meta title and description, and structured data typed by the page's role.
Publishing and exporting #
- Publish to Live Page and Publish All to Live Pages first show a preview of every replacement, old text above new. Publishing cannot be undone from the add-on. It works only when the theme is marked installed and the page is matched to a local page. It also applies the meta title, description and focus keyword.
- Nothing publishes automatically. Supported for publishing: Divi, WPBakery, Elementor, Gutenberg and the classic editor. Beaver Builder and Oxygen are refused.
- Export as PDF and Export All Pages make a print-ready document. Choose "Save as PDF" in your browser's print window.
Settings reference #
Every option on the Settings screen, with its default. One form saves them all.
Always On SEO → Settings
The Settings screen has a list of sections on the left and a Search settings… box. Whichever section you are looking at, Save Settings saves every section, not just the one on screen. You need the manage capability (Administrators have it).
License & Plan #
This section is not part of the form. It works immediately. See Plans, license and quota.
AI Access Paid #
Choose which roles may use the AI buttons. Administrators always can.
| Option | Default | What it does |
|---|---|---|
| Roles allowed to use AI generate | Administrator only | Tick Editor, Author and/or Contributor to let them use AI generation too. They also need access to the page they are editing. |
Schema Markup #
| Option | Default | What it does |
|---|---|---|
| Business type | Organization | Organization, Local Business, or Both (Organization and Local Business). |
| Logo URL | Empty | Empty means the website icon is used. |
| Social profiles | Empty | One address per line. Published as sameAs in the structured data. |
| Add Article schema to blog posts | On | Adds Article structured data to posts. |
| Show Product schema on every page | Off | Product schema is otherwise offered on products and custom post types, and everywhere when WooCommerce is active. |
The business name, phone, email and address come from Keyword Strategy → Setup. If Yoast SEO, Rank Math or All in One SEO is active, these fields are saved but not used. See Structured data and tags.
Authors #
A read-only table of your authors: how many posts each has published, and whether their credentials are set. Each row links to that person's WordPress profile, where the fields live: Job title, Credentials, Expertise and Profile URLs.
Social Meta #
| Option | Default | What it does |
|---|---|---|
| Default social image | None | Pick one with the Media Library (Choose Image / Remove). Used when a page has no social image and no featured image. 1200×630 pixels or larger is recommended. |
Blog Engine Paid #
Everything here is off by default. See Blog Engine for how it works.
| Option | Default | What it does |
|---|---|---|
| Write and publish posts automatically | Off | Turns on scheduled writing. Posts are published without anyone reading them first. |
| Most posts per month | 8 (1 to 30) | Sets both the ceiling and the pace. A cadence table shows the schedule. A warning appears at 12 or more. |
| Category for automated posts | Leave uncategorised | The category new posts go into. |
| Author for automated posts | Whoever is signed in | The WordPress user the posts are written as. |
| Also post each published article to Google Business Profile | Off | Announces each new article on your Google Business Profile. |
| Also write about subjects your competitors cover and you do not | On | Only acts when automation is on. It is the last source of subjects. |
| Add a featured image | On | Gives each post a featured image. |
| Use a stock photo if nothing on this website matches | On | Falls back to a stock photo (from Pexels) when your media library has nothing suitable. |
Breadcrumbs #
| Option | Default | What it does |
|---|---|---|
| Enable breadcrumbs | Off | Turns the breadcrumb trail on. |
| Home label | Home | The text for the first link. |
| Separator | / | The character between levels. |
| Prefix text (optional) | Empty | Text shown before the trail. |
| Start the trail with a link to the home page | On | |
| End the trail with the current page title | On |
Nothing is inserted automatically. Place the trail with the shortcode [alwaysonseo_breadcrumbs] or, in a theme template, alwaysonseo_breadcrumbs(). Breadcrumb structured data is added for you either way, unless another SEO plugin handles it.
Preferred Source #
| Option | Default | What it does |
|---|---|---|
| Enable the preferred source button | Off | Shows Google's "preferred source" button. It loads one Google script, only on pages where the button appears. |
| Where it appears | Only where I place it | Or Automatically under every blog post, or Automatically under every post and page. |
| Button style | Light | Light for light backgrounds, Dark for dark backgrounds. |
Place it yourself with [alwaysonseo_preferred_source] or alwaysonseo_preferred_source(). A plain link is also shown on the screen.
Missing Alt Text #
| Option | Default | What it does |
|---|---|---|
| Fill in missing alt text on the front end | Off | Shows alt text you have already saved where a page's image has none. It never makes text up from file names. |
| Also add the Media Library title as a title attribute | Off | Adds the title as a tooltip attribute. |
Images with no text saved anywhere are listed under Image Alt Text so you can write it once.
Image Optimization #
Five options, described in full under Image Optimization → Settings.
llms.txt #
See llms.txt.
Hreflang #
| Option | Default | What it does |
|---|---|---|
| Enable hreflang tags | Off | Outputs hreflang tags. If WPML or Polylang is active, their language data is used. Otherwise add alternates per page from the Hreflang Alternates row menu in Page SEO. |
Settings that live on other screens #
- 404 logging on or off (default on, capped at 500 paths): on Redirects.
- Report email recipients (up to 10) and automatic sending: on Reports.
- Search Console and Analytics history depth (3, 6, 12 or 16 months for Search Console, default 16): on the Keyword Strategy Google tabs.
- Header and footer code: on Header & Footer.
Plans, license and quota #
What each plan includes, how to activate a license, and what happens when AI usage runs out.
Free and paid #
Free Free
No account, no license key, nothing to connect. A free install never contacts our servers.
- Meta title, description, canonical, no-index, social meta
- Schema, breadcrumbs, hreflang, llms.txt
- Image alt text and WebP conversion
- Broken links, redirects and the 404 log
- Header and footer code
- Manual business info and keywords
- CSV import and export
Paid plans Paid
Needs a license key. Adds:
- All AI writing
- Page Speed
- Search Console, Analytics and Business Profile
- Competitor research
- Blog Engine
- Monthly report emails
- Change tracking with results
| Plan | Websites | AI credits per month |
|---|---|---|
| Free | Unlimited | None |
| Starter | 1 | 200 |
| Pro | 3 | 750 |
| Agency | 15 | 4,500, plus white-label monthly reports |
Prices are in US dollars and are on the pricing section of the home page, which always shows the current ones.
Paying, renewing and cancelling #
- When you sign up you choose how long to pay for: 3 months, 6 months or 1 year. You pay the whole amount straight away, through Razorpay.
- When that length ends, the same amount is charged again for the next one, automatically, until you cancel.
- The Renews date in Settings → License & Plan is the day the next payment is due. Your AI credits still reset at the start of every month, whatever length you chose.
- To cancel, email [email protected]. The plan stays active until the end of the length you have already paid for, and does not renew. A length that has been paid is not refunded.
- If a renewal payment fails and cannot be recovered, the plan shows as Suspended and the key is kept, so settling the payment restores access.
Activating a license #
Always On SEO → Settings → License & Plan
With no license active the screen says No license active. There are two ways in:
- Paste key. Paste your key (it looks like
SAP-XXXX-XXXX-XXXX-XXXX) and click Activate. - Log in with email. Enter your email, click Send code, then enter the 6-digit code and click Verify. Use Use a different email to start over.
Activating sends your key and this website's address to our service, which returns your plan, your monthly allowance and your website list. The website then receives its own token, which replaces the key you pasted.
Once active, the screen shows your Plan, This site's monthly limit (when a per-site cap is set), the Renews date, and Deactivate this site. Deactivating removes only this website from the license, frees its slot, and the website loses paid features straight away. If every slot is used, activation fails and says so.
AI credits and usage #
Every paid plan includes a number of AI credits each month. An AI action spends credits according to its size: a small job costs 1, and bigger ones cost more because they read or write much more.
| Credits | What it covers |
|---|---|
| 1 | A page title or description, image alt text and image titles, a focus keyword, keyword ideas and related keywords, page metadata. |
| 2 | Business info and description, topic ideas, a blog outline, a search summary, page schema, a page FAQ, a section of website copy, an llms.txt file, a content refresh. |
| 3 | A full page of website copy, reading an uploaded document, and anything that searches the web (competitor research, business verification, your business profile and social profiles). |
| 5 | A full blog post. |
The credits are per plan and shared by every website on the license. An agency can also set a monthly cap for a single website. Credits start again at the beginning of every month.
- The Dashboard has an AI credits and tokens card: credits left, credits used this month, the date they reset, your all-time total, and the tokens, provider and model for this website. Tokens are shown for information; credits are what your plan counts.
- Your full history, month by month and by action, is on your account at app.alwaysonseo.com under AI usage.
- You are warned when you have used 80% and 95% of the month's credits, and again when you run out. The warning shows on the Dashboard and in the bell on your account.
- If you do not have enough credits for an action, a window says Not enough AI credits, what the action needs and what you have left, and offers credit packs. Nothing is used when an action is refused.
- Credit packs never expire. Your monthly credits are used first, then your pack credits, and anything left carries over to the next month.
- The Blog Engine keeps queued posts waiting for credit rather than marking them failed.
- If a provider refuses a request because of region, the plugin retries up to three times, and refused requests are not billed.
If a plan lapses #
| Situation | What happens |
|---|---|
| The key is no longer recognised (deleted) | The stored key is removed and the website drops to Free. |
| The plan is suspended or cancelled | The website shows as Suspended and acts as Free, but the key is kept. Settling the invoice restores access without re-entering anything. |
| Our service is briefly unreachable | The last known plan is kept, so a short outage does not lock you out. |
On a locked feature you see a button that opens the Upgrade to a paid plan window. That window lists plans from data inside the plugin and contacts nothing. Maybe later closes it.
Roles and permissions #
Who can see and change what.
| Capability | Who has it by default | What it allows |
|---|---|---|
Manage (manage_alwaysonseo) | Administrator | Settings, Redirects, Header & Footer, Projects, activating or deactivating a license, connecting or disconnecting Google, CSV import and export, per-page header and footer code, per-page schema JSON, llms.txt, and converting, restoring or repairing images. |
Edit (edit_alwaysonseo_meta) | Administrator, Editor | Seeing the menu and editing titles, descriptions and most other fields. Editing a particular page also needs permission to edit that page in WordPress. |
Use AI (use_alwaysonseo_ai) | Administrator, plus roles you tick under Settings → AI Access | The AI buttons. |
- Authors and Contributors have none of these, so they do not see the Always On SEO menu.
- Capabilities are granted when the plugin is activated. On a multisite network, websites activated later do not get them automatically (super admins are unaffected).
- You can adjust the three capabilities with any role-editor plugin.
Privacy and data #
What the plugin stores on your website, what it sends out and when, and what is removed if you delete it.
What is sent, and when #
This applies once a license key is active.
| What | When | Details |
|---|---|---|
| License key and website address | On activation, and whenever the Dashboard or Settings screen loads | Returns your plan, usage and renewal date. |
| SEO status summary | Whenever the Dashboard loads | Health score, number of pages with issues, number of images missing alt text and checklist counts. No page content, addresses or visitor data. |
| AI prompts | When you use an AI feature | The page title and an excerpt. Our service forwards it to an AI provider (Google Gemini, OpenAI or Anthropic Claude) and returns the text. |
| Page address for Page Speed | When you check a page | Forwarded to Google's PageSpeed Insights. |
| Google connection | When you connect | You sign in on Google's own screen. Our service stores the credential encrypted and fetches Search Console, Analytics and Business Profile data for you. |
| Email and code | When you log in with email | Sent only when you click Send code and Verify. |
| Business name and address or description | When you use Find competitors | Sent as a web-search prompt. |
| Stock-photo search words | When the Blog Engine looks for a featured image | Sent to Pexels through our service. |
| Monthly report snapshot | A few days after each month ends | The largest thing sent, and the only one that includes content: page titles and addresses, search terms with clicks and positions, what changed, competitor names and websites, and health and speed figures. It is stored against your license so past reports survive moving host. |
| Preferred Source script | Only on pages showing that button | Loads one script from Google. |
Three of these are not triggered by a button: the Dashboard summary, the monthly report snapshot and, if you turn it on, the Blog Engine's schedule. Everything else happens only when you click the control that does it.
What is stored on your website #
- Settings in WordPress options, all starting
alwaysonseo_. - Per-page data in post meta starting
_alwaysonseo_: title, description, no-index, canonical, focus keyword, social fields, FAQ items, schema, header and footer code and so on. Image alt text is kept in WordPress's own alt-text field. - Author fields in each user's profile: job title, credentials, expertise and profile addresses.
- Ten tables for redirects, the 404 log, Page Speed history, AI usage, Search Console history, Analytics history, daily totals, the change log, the Blog Engine queue and report snapshots.
- Short-lived caches that expire on their own, from five minutes to a day.
- Scheduled jobs (WP-Cron): a daily Search Console sync, a daily Analytics sync, a daily check that freezes last month's report on or after the 5th, and the Blog Engine's schedule when enabled. Deactivating the plugin removes them but keeps your data.
If you delete the plugin #
Deleting it (not just deactivating) removes all alwaysonseo_ options and caches, drops the ten tables, clears the scheduled jobs and removes the three capabilities from Administrator and Editor. On multisite it does this for every website.
- Kept: titles, descriptions and the other per-page meta, and the author profile fields. Your SEO work stays on your pages.
- Lost for good: the Search Console and Analytics history stored on your website (Google only keeps about sixteen months), the change log, and the 404 log.
- Not removed by deleting: report snapshots stored with your license.
Troubleshooting #
Fixes for the most common problems. Click a question to open it.
My titles or descriptions are not showing on my website
Check these in order:
- If Yoast SEO, Rank Math or All in One SEO is active, this plugin does not output the description tag. Use one SEO plugin. See If another SEO plugin is active.
- Clear any caching plugin or server cache, then view the page's source and search for your title.
- An empty title field means WordPress's own page title is used.
The AI buttons are locked or missing
The buttons are visible on Free so you can see what is available, but they open the upgrade window. On a paid plan, if you still cannot use them, you may not have AI access. You would see "Your role does not have access to AI features", and the Generate with AI menu is shown only to people with the AI capability. Administrators always have it. Others can be given it under Settings → AI Access. See AI Access.
It says I've used this period's AI quota
Your plan's monthly allowance is used up. It resets at the start of the next month. You can buy credit packs from the window that appears. Packs never expire and are used automatically after the allowance resets. Blog Engine posts wait for credit instead of failing. See AI usage and quota.
"This website's Google connection has expired"
Google stopped accepting the saved connection, which happens now and then. Open any Google tab in Keyword Strategy and click Reconnect Google, then sign in again. One reconnect fixes Search Console, Analytics and Business Profile. Nothing already stored is lost. See If the connection expires.
Business Profile shows a quota error
Google gives new Cloud projects no Business Profile quota by default. It is a one-time approval Google must grant, not a fault with your connection. Search Console and Analytics are not affected.
Page Speed says my website isn't reachable
Page Speed asks Google to load your page, so the address must be reachable from the internet. Local, staging, .test, .local and private-network websites are refused. Test your live website instead.
Image Optimization says my server can't convert to WebP
Your server's image library cannot write WebP files. Ask your host to enable WebP support in GD or Imagick. Until then, the Convert buttons are switched off. See What your server needs.
PNG images have a black background after conversion
An older version could convert on a server whose image library could not write WebP, saving JPEG files labelled as WebP. A JPEG cannot be transparent, so see-through areas turned black. Open Image Optimization and click Repair images in the red notice. It restores the originals where they still exist. Then convert again. See The "converted incorrectly" notice.
There is no "Restore original" button
The button only shows when the original file is still on your server. If Keep the original JPG/PNG files on disk after converting was off, the originals were deleted and cannot be restored.
A scan stalls or pages fail
Scans run from your browser, so keep the tab open and visible. Pages that time out are skipped and the scan carries on. If many fail, your server may be blocking requests to its own addresses (some security plugins and firewalls do), or the website is slow. Run the scan again, which picks up where the cache left off.
Orphaned pages or link suggestions look incomplete
They only know about pages that have been scanned. The screen says "Based on X of Y pages scanned so far". Click Scan All Pages and let it finish.
My redirect doesn't work
Redirects match the exact path only, ignoring the web address, query string and trailing slash, and they only apply when WordPress would otherwise show a "not found" page. If the old address still opens a real page, it will not redirect. Clear any caching plugin after adding a redirect. See Redirects.
The 404 log is full of strange addresses
Look at the Automated probes list. Addresses there have no referrer, nothing on your website links to them, and they sit under no real section of your website. It is the usual footprint of security scanners, and nothing needs fixing. Use Needs no redirect to mark them.
A page is flagged as thin but has plenty of content
The word count only counts the words stored in the page's own content. Some page builders keep their text elsewhere, so a rich page can look thin. You can lower the threshold under Flag pages under [300] words, or ignore the flag for that page. See Content Suggestions.
The Dashboard trend is empty or has gaps
One reading is recorded each day, the first time the Dashboard loads that day. A day nobody opens it has no reading. The trend needs two days before it draws.
A month shows "Not finished yet" or "No data this far back"
"Not finished yet" is the current or a future month. "No data this far back" means the month is before the earliest Search Console or Analytics data stored on your website. Search Console keeps about sixteen months, so older months cannot be built. Connect Google and use Build history to collect what is available. See The month calendar.
Report emails don't arrive
Emails are sent through your website's own mail setup. Click Send me a test. If it does not arrive, install an SMTP plugin and send it through a proper mail service. Also check the spam folder, and that you added at least one address.
/llms.txt shows a "not found" page
The file must be switched on under Settings → llms.txt. If you just turned it on, go to Settings → Permalinks and click Save to refresh the website's address rules. If a real llms.txt file exists in your website's root, the server serves that file instead.
Suggest Keywords added keywords I don't want
Suggest Keywords adds its ideas to your Suggested keywords list and keeps the ones already there. Remove any you do not want with the × on each keyword. The list holds up to 100.
My paid features disappeared
Open Settings → License & Plan. If the plan shows Suspended, settle the invoice and access returns by itself, because the key is kept. If the key was no longer recognised, the website returns to Free and you need to enter the key again. A short outage on our side does not remove access. See If a plan lapses.
For developers #
The hooks and helpers you can use, and what is deliberately not exposed.
Shortcodes and template tags #
| Shortcode | Template function | Output |
|---|---|---|
[alwaysonseo_breadcrumbs] | alwaysonseo_breadcrumbs( $echo = true ) | The breadcrumb trail. Needs Enable breadcrumbs. |
[alwaysonseo_preferred_source] | alwaysonseo_preferred_source( $echo = true ) | Google's preferred-source button. Needs it enabled. |
Capabilities #
| Constant | Capability | Helper |
|---|---|---|
ALWAYSONSEO_CAP_MANAGE | manage_alwaysonseo | alwaysonseo_can_manage() |
ALWAYSONSEO_CAP_EDIT | edit_alwaysonseo_meta | alwaysonseo_can_edit(), alwaysonseo_can_edit_post( $id ) |
ALWAYSONSEO_CAP_USE_AI | use_alwaysonseo_ai | alwaysonseo_can_use_ai(), alwaysonseo_can_use_ai_for_post( $id ) |
There is no filter to change the mapping. Use a role-editor plugin to adjust the three capabilities.
Where the data lives #
- Post meta keys start with
_alwaysonseo_:title,description,noindex,canonical_url,focus_keyword,og_title,og_description,og_image,faq_items,schema_jsonand others. They are exposed in the REST API for public post types, with per-field permission checks. - Image alt text is stored in WordPress's own
_wp_attachment_image_alt. - Options start with
alwaysonseo_. See What is stored on your website.
REST API #
The admin screens use the namespace alwaysonseo/v1. Every route checks the capabilities above, and requests need a valid REST nonce. The routes are internal to the screens and are not a stable public API, so they can change between versions.
Areas: license, dashboard, page-seo, page-content, keyword-strategy, blog-audit, image-alt, image-optimization, link-checker, redirects, gsc, ga4, gbp, reports, changes, content-quality, llms-txt, locations.
What is not provided #
- Action and filter hooks: the plugin does not define its own public hooks.
- WP-CLI: no commands are registered.
- Constants:
ALWAYSONSEO_VERSIONholds the plugin version.
The front end serves /llms.txt and /llms-full.txt as virtual files. CSV import and export run through admin-post actions that need the manage capability.
Glossary #
Plain-language meanings of the terms used in the plugin.
- Meta title
- The title search engines show for a page. Aim for 30 to 55 characters.
- Meta description
- The summary shown under the title in search results. Aim for 120 to 160 characters.
- Focus keyword
- The main search phrase a page is meant to rank for.
- Canonical URL
- The one address search engines should treat as the real one when a page can be reached in several ways.
- No-index
- An instruction asking search engines to leave a page out of results.
- Schema / JSON-LD
- Structured data added to a page so search engines understand what it is, such as a business, an FAQ or a product.
- Hreflang
- Tags that tell search engines which language or region each version of a page is for.
- Open Graph
- Tags that control how a page looks when shared on social websites.
- Impressions, clicks, CTR
- How often a result was shown, how often it was clicked, and clicks divided by impressions.
- Position
- Average place in search results. Position 1 is the top. Positions 1 to 10 are page one.
- Core Web Vitals
- Google's measures of loading, responsiveness and visual stability: LCP, TBT (a lab stand-in for responsiveness) and CLS.
- WebP
- A modern image format that makes files smaller than JPG or PNG.
- Orphaned page
- A published page that no other page links to.
- AEO
- Answer engine optimization: making your content easy for assistants and answer boxes to quote.
- GEO
- Generative engine optimization, also called AIO: the same idea for AI search tools.
- SXO
- Search experience optimization: how fast and usable a page is, as well as how well it ranks.
- llms.txt
- A plain summary of your website for AI tools. A community proposal that Google has said it does not use.
Support #
How to get help.
- Search this page, and check Troubleshooting.
- If you are still stuck, contact support at [email protected].
- Tell us your website address, your plan, what you did, what you expected, and what happened instead. A screenshot helps.
Free users can also ask on the plugin's WordPress.org support forum: wordpress.org/support/plugin/always-on-seo.
The full list of changes in every release is in changelog.txt in the plugin folder, and in the plugin's changelog on WordPress.org.
Still stuck?
Check the troubleshooting section, or contact support with your website address and what you expected to happen.