=== Rank Forge – SEO Score, Schema, Sitemap & Redirects ===
Contributors: avakodeforge
Donate link: https://avakode.com
Tags: seo, schema, sitemap, meta-tags, serp-preview
Requires at least: 6.5
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.5.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

SEO plugin for WordPress: SEO score, SERP preview, schema markup, XML sitemap, robots.txt, redirects and image SEO. No account or API key needed.

== Description ==

**Rank Forge** is an SEO plugin built around one idea: a score is only useful if it tells you what to do next. The box under the editor of every post gives you an SEO score from 0 to 100, a Google-style SERP preview, focus keyword analysis, and editable SEO title, meta description and schema, all on one screen. No account and no API key are required.

Almost everything in the Free plugin happens on your own site: schema markup, XML sitemap, robots.txt, the redirect + 404 manager, image SEO (auto alt text), local business schema, and video schema. What leaves your site is listed under External services: the AI buttons send the text they work on to the Forge API when you press one, and the Broken Links scan (when you start it and once a night), the check of your own site's robots.txt, the feedback card and the health diagnostics make the small requests described there. The optional **Pro add-on** layers AI on top — one-click AI meta generation, content optimization, and schema detection — plus Google Search Console, Site Audit, A/B testing and auto internal links.

Images and local search are covered too. Image SEO adds alt text made from the file name when you upload a picture and shows a reminder in the media library when a picture has none. Local Business schema takes your address, phone number and opening hours. Video SEO adds VideoObject schema and a video sitemap. For WooCommerce stores, Rank Forge adds Product schema to product pages.

= Switching from another SEO plugin =

While Yoast SEO, Rank Math, AIOSEO or SEOPress is active, Rank Forge takes that plugin's meta description, robots, social and schema tags off the page and prints its own, so the two do not print duplicate tags; the other plugin's search engine verification codes stay. The migration tool imports titles, descriptions, focus keywords, canonical URLs, robots settings and social fields from Yoast SEO, Rank Math, AIOSEO and SEOPress, working directly from the database. The SEOPress importer also brings over redirects.

= Free =
* On-page SEO score (0-100) per post
* SERP preview
* Focus keyword analysis
* XML sitemap
* robots.txt editor
* Basic schema markup (Article, BlogPosting) and the visual Schema Builder
* Noindex / nofollow per post
* Redirect manager (301, 302, 307) with 404 log
* Broken-link scanner across all published content (SSRF-pinned for safety)
* Image SEO — alt text made from the file name on upload, and a reminder in the media library
* Local Business schema (LocalBusiness / NAP / opening hours)
* Video SEO — VideoObject schema and a video sitemap
* Coexists with Yoast / Rank Math / AIOSEO / SEOPress during migration

= Rank Forge Pro =

Pro is a separate add-on plugin, distributed from https://rankforgewp.com and not
included in this download. Everything listed above is part of this plugin and
works without it.

* AI meta generation (title, description, focus keyword)
* AI content expansion / simplification / external-link suggestions
* Internal link suggestions and automatic internal linking
* Google Search Console integration (rankings, indexing requests)
* Site audit (your 200 most recent published posts and pages, checked for missing titles, descriptions, headings and alt text, thin content and duplicate titles; with WooCommerce, also your 200 most recent products, checked for titles, descriptions, focus keywords, alt text and duplicate titles)
* Content brief, content decay and the content optimizer
* A/B testing for titles + descriptions
* Priority email support with an active Pro licence

Part of the **Forge Suite**: twelve WordPress and WooCommerce plugins by Avakode, including Lang Forge, Form Forge and Field Forge.

== External services ==

Rank Forge can make outbound HTTP requests. Activating the plugin does not contact any server. The plugin schedules one task, the nightly Broken Links scan described below; nothing else is sent until you use the feature that sends it. This is the whole list: the plugin's code makes no other request. Each one is an ordinary WordPress HTTP request, so the server it reaches sees the network address it came from.

* **The sites your content links to** — when you start a Broken Links scan (Rank Forge → Tools → Broken Links), and once a night when the scheduled scan runs (about 03:00 in your site's time zone, set up from the first request after activation), the plugin sends a HEAD request to each link found in your published content to see whether it still answers. The request carries WordPress's standard user-agent, which names your site's address; nothing else about your site or your visitors is sent. Apart from the nightly scan, nothing is checked until you start the scan.
* **Your own site's robots.txt** — only when an administrator opens a Rank Forge screen that shows the status of robots.txt (Settings, Robots.txt), the plugin fetches `/robots.txt` at your own site's address with a plain GET, no body and no credentials, to show what visitors and crawlers receive; the answer is kept for 60 seconds. The request goes to your own site, carries WordPress's standard user-agent (which names your site's address), and nothing is sent to any other server.

**The Forge API at https://api.avakode.com** — the build distributed by Avakode talks to it for the AI buttons, for the feedback card and for the health screen, and carries the client the Pro add-on uses for its licence, trial and Google requests. Every one of these is started by an administrator and never by a visitor's page view.

* **AI buttons — `/ai/process`.** Only when you press one of the AI buttons in the editor or on the Rank Forge screens (meta titles and descriptions, titles, descriptions, focus keywords, schema, local-business schema, content expansion and simplification, external-link suggestions, internal-link suggestions and automatic internal links, subheading keyword checks, AI-readiness analysis, issue fixes, query-intent classification, audit summaries, content briefs and custom prompts). One press sends the name of the action, the text it works on (the post's title and content, cut to at most 50,000 characters; for a WooCommerce product its name, its short description and its description, and nothing else of the product; or the keyword, the issue to fix, the candidate pages' titles and addresses, the search queries or the prompt you typed, depending on the button), your site's domain and the licence key; a site on the free trial sends its trial token in a header instead; a site connected to an Avakode account (see Connecting your account below) that has no licence key, or a key with no active Pro licence behind it, and no usable trial sends the connection token in a header instead, and its WordPress address in place of the domain. When the service refuses a trial request without charging anything (the trial's credits are used up, the trial has ended or its token is not accepted) and the site is connected, the same press is sent once more with the connection token and without the trial token; the site keeps what the refusal said, so once nothing is left of the trial the next press goes to the account directly. Nothing else is ever sent twice. Your site's domain also travels in an X-Site-URL header. api.avakode.com does not write the answer itself: it passes the content of the request on to OpenAI, through Cloudflare AI Gateway, to produce it; your licence key (or trial token) is not passed on, and neither is the connection token, and neither is your site's domain, except where a prompt names it: the local-business form names your site's address together with the business name (your site's name unless you type another), the city and the description; the schema button names the post's address, its image address, the author and your site's name; the link buttons name the addresses of the candidate pages. OpenAI's terms: https://openai.com/policies/terms-of-use/ — OpenAI's privacy policy: https://openai.com/policies/privacy-policy/; Cloudflare's terms: https://www.cloudflare.com/website-terms/ — Cloudflare's privacy policy: https://www.cloudflare.com/privacypolicy/. The answer is shown to you or applied to the post you pressed it on, and each press spends Forge credits. A button you do not press sends nothing.
* **Connecting your account — `/auth/connect/init`.** Only when an administrator presses "Connect Avakode account" on the AI credits card (Rank Forge → Settings, AI-Powered SEO). Sends the product identifier `rankforge`, your site's address (the WordPress address of Settings → General), the address of the Rank Forge Settings screen to return to (it carries a one-time security code of your WordPress session) and the word `credits`, which says the connection is for credits and not for a licence. An address on avakode.com comes back and your browser is sent to it; you sign in there and approve this site. Never on activation and never on a page view.
* **Finishing the connection — `/auth/exchange`.** Once, when your browser comes back from avakode.com after you approved the site. Sends the one-time code avakode.com gave your browser and your site's address (the same WordPress address). The connection token, the e-mail address of your Avakode account, the number of the connection and the credits left come back. Four things are kept in your site's database: the token (encrypted), the account's e-mail address (it is shown on the AI credits card), the number of the connection and the time it was made. The credits left are not kept. For two minutes after you connect or disconnect, a short note of how it went is kept too; nothing else is stored.
* **Credits left — `/ai/usage`.** When an administrator opens the AI credits card of a site that is connected to an Avakode account, not before. A plain GET that carries the connection token in a request header (never in the address), your site's address (the same WordPress address) and the product identifier `rankforge`; the number of credits left on the account comes back and is shown on the card. If the request fails the card shows a dash.
* **Disconnecting — `/auth/credits-connection/revoke`.** Only when an administrator presses "Disconnect" on the AI credits card. Sends the connection token in a request header and nothing else; the connection stops working. If Avakode cannot be reached, the token is deleted from your site anyway.
* **Feedback card — `https://api.avakode.com/feedback`.** The card is shown to administrators on the Forge Suite and Rank Forge screens, not in the first thirty days after the plugin was first used, and not again for sixty days after an answer or fourteen days after "Not now". Pressing "Send feedback" sends your 0–10 score, whatever you typed in the comment box, which product the card was shown on, and the plugin and WordPress version numbers. No licence key, e-mail address or content of your site is sent, and "Not now" sends nothing at all. The request has no User-Agent of its own, so it carries WordPress's default one, which names your WordPress version and your site's address. Nothing comes back that the plugin uses.
* **Health screen — `https://api.avakode.com/health`.** Only when an administrator presses "Run diagnostics" in Setup & Health on the Forge Suite screen, or a repair button next to it, which runs the diagnostics again. A plain GET with no body that carries no licence key and nothing about your site in the request itself, under its own User-Agent (`ForgeSuite/health-check`) instead of WordPress's default one, so neither your WordPress version nor your site's address is in it. What comes back is a reachability status shown on the screen.
* **For the Pro add-on — `/licenses/validate`, `/public/trial/activate` and the Google connection `/integrations/google/auth/init`, `/integrations/google/auth`, `/integrations/google/status`, `/integrations/google/disconnect`, `/integrations/google/gsc/sites`, `/integrations/google/gsc/search-analytics`, `/integrations/google/gsc/url-inspection`, `/integrations/google/ga4/properties`, `/integrations/google/ga4/report`, `/integrations/google/indexing/submit`, `/integrations/google/indexing/history`.** This build carries the client that the add-on uses for these requests; the free plugin does not make any of them itself, and on a site without the add-on none is ever sent. With the add-on active, a licence check (`/licenses/validate`) sends the licence key, the product name and your site's address; the free trial (`/public/trial/activate`), only when you press "Start free trial", sends the product name, your site's address and the administrator e-mail address from Settings → General, once; the Google requests go out only after you press "Connect Google" and use the Rankings, Analytics & Traffic or Indexing pages, carry the licence key (or the site token the licence check returned) and your site's domain with the question being asked, and are passed on to Google by the Forge API with the account you authorised (read-only for Search Console and Analytics; a URL is submitted only when you press "Submit to Google Index"). Google's terms: https://policies.google.com/terms — Google's privacy policy: https://policies.google.com/privacy. The add-on's own readme lists every request it makes.

Terms: https://avakode.com/terms — Privacy: https://avakode.com/privacy

== Installation ==

1. Upload `rankforge` to `/wp-content/plugins/`, or install via Plugins → Add New.
2. Activate the plugin.
3. Open any post / page — the Rank Forge metabox appears below the editor.
4. (Optional) The AI features, Search Console, Site Audit and the other Pro screens come with the separate Rank Forge Pro add-on; the add-on adds its own Connect screen.

== Frequently Asked Questions ==

= Will Rank Forge conflict with my current SEO plugin? =

No. While another SEO plugin is active, Rank Forge takes that plugin's duplicate meta description, robots, social and schema tags off the page and prints its own; the other plugin's search engine verification codes stay. Use **Rank Forge → Migration** when you are ready to bring its data over.

= Can I migrate my existing Yoast SEO, Rank Math, AIOSEO or SEOPress data? =

Yes. The migration tool imports titles, descriptions, focus keywords, canonical URLs, robots settings and social fields from Yoast SEO, Rank Math, AIOSEO and SEOPress, and the SEOPress importer also imports redirects. It reads the database directly, so the other plugin does not have to be running.

= Does Rank Forge work with WooCommerce? =

Yes. It adds Product schema to WooCommerce product pages. The Pro add-on also audits your most recent products for titles, descriptions, focus keywords and alt text.

= Is there a free version? =

This plugin is the free version. It includes the SEO score, SERP preview, focus keyword analysis, XML sitemap, robots.txt editor, schema markup with the visual Schema Builder, redirects with a 404 log, broken-link scanner, image SEO, local business schema and video SEO. AI features, Google Search Console, site audit, A/B testing and automatic internal links are in the separate Rank Forge Pro add-on.

= Do I need an API key of my own for the AI features? =

No. The free plugin needs no account and no API key. The AI features belong to the Pro add-on and run through the Avakode service on Forge credits, so there is no key of your own to paste.

= Does the SEO score use AI? =

No. The score is deterministic: keyword density, readability, internal links, image alt text and similar checks. AI is used only for generation actions, such as meta text, schema or content expansion, when you click the AI button of the Pro add-on.

= How are redirects stored? =

In a custom table, `wp_rankforge_redirects`, not in `wp_options`. This avoids the autoload bloat that slows down your server response time.

= How do I keep using AI when the trial's credits run out? =

AI in Rank Forge is a feature of the Rank Forge Pro add-on: it is on while a Pro licence or the free trial is running. The AI buttons spend this site's free trial first. When the trial's credits are used up before it ends, connect your Avakode account: press "Connect Avakode account" on the AI credits card (Rank Forge → Settings, AI-Powered SEO), sign in at avakode.com and approve this site. The buttons then spend the credits of your Avakode account, which are bought on avakode.com; none are given away. Until an account is connected, the press that finds the trial's credits used up is still sent, with the trial, and the service refuses it; the button then answers "Connect your Avakode account to use AI credits" with a link to the card. Once the site knows the trial's credits are used up, it sends nothing and asks you to connect. A site with an active Pro licence is paid by the licence, and the card says so; the account pays when the site has no licence key, or a key with no active Pro licence behind it, and the trial's credits have run out. The connection pays for the AI work, it does not switch the features on: when the trial ends without a Pro licence, the AI features are off.

== Screenshots ==

1. The SEO box in the post editor: a score out of 100, the focus keyword, length meters for the SEO title and meta description, and a Google preview.
2. The checks behind the score: the issues that cost points and optional ideas, each in plain words.
3. Schema markup for the post, detected as an Article, with every field filled from the content and editable.
4. The dashboard: what to fix first, the score across all posts and the most common issues.
5. Redirects with their hit counts, one created automatically when a post's slug changed, and the missing pages visitors asked for.
6. The XML sitemap that search engines read, with a preview people can read too.

== Changelog ==

= 1.5.0 =
* AI fixes and suggestions: when the answer to a paid AI request is lost on its way back to your browser (a dropped connection, a timeout), repeating the request now gives you that answer again instead of buying a new one. This covers Fix with AI, the bulk fix, the AI readiness check and the Local SEO texts. "Generate again" still asks for a new answer and says that it spends credits.
* Bulk fix and Fix all: when a run stops (credits used up, the AI still busy, a lost connection), what is already fixed stays fixed, the screen names the posts that are left, and the repeat asks only for those. After a stop, Fix all shows the number and the price of the issues left.
* Bulk fix no longer saves an empty or unchanged AI text over a post. A paid fix that could not be saved is kept, and the repeat saves it at no charge.
* The preview in the Fix drawer for several issues at once works again; it ended with an error.
* Counts read correctly in every language: "1 word", "2 words", "5 words" and the like are in the plural form of each language in the SEO checks, the Dashboard, the A/B and migration messages (15 languages).
* Uninstall removes the stored state of AI requests and the kept AI answers, with or without the "Delete Rank Forge data on uninstall" box.

= 1.4.1 =
* Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.
* Breadcrumbs: the WooCommerce shop page no longer raises a PHP warning on every visit. Its crumb shows the title of the page.
* Background jobs: on a site where WP-Cron is switched off (DISABLE_WP_CRON), queuing a job no longer sends the request that wakes WP-Cron. The site's own cron runner starts the job, as you set it up.
* The shared Forge Suite dashboard passes the WordPress Plugin Check.

= 1.4.0 =
* Fixed: keep the uninstall choice compatible with older Free versions when only one package has been updated.
* Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.
* Uninstall keeps analyses, redirects, SEO metadata and settings unless "Delete Rank Forge data on uninstall" is selected. Google connection credentials are always removed.
* Removed unused Freemius integration code.
* Licence keys are always removed when the plugin is uninstalled.

= 1.3.0 =
* Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.
* Broken Links: the scan now covers every published post (it used to read only the first 200). It works through them in small background jobs that carry on from one another and it runs by itself once a night. A scan that stopped before the end says "The last scan did not finish" and how far it got, a second press while a scan runs does not start another one, a link used in many posts is checked once per scan, and a link whose address has no host counts as broken.
* Broken Links: a link is no longer called broken when the check could not tell. A link whose host name could not be looked up right now, or that this server has no route to (often an IPv6-only host on a server without IPv6), is skipped and tried again at the next scan; a site that cannot check addresses safely (it needs the PHP cURL extension and no proxy server) says so instead of calling those links unreachable.
* Broken Links: each check looks the host name up once, goes ahead only when every address it gets is public, and connects to exactly those addresses. Links to local, private and other non-public addresses are skipped, now including the 100.64.0.0/10 and 198.18.0.0/15 ranges and IPv4 addresses written inside IPv6.
* Sitemap: password-protected posts, and posts whose canonical address points to another page, are left out of the maps and the index. A post whose canonical is written in another percent-encoding (a Cyrillic address, for example) stays in. The Video sitemap takes its description from the excerpt and then the title, and leaves out protected posts and posts with a canonical elsewhere.
* Sitemap: a site set to discourage search engines has no sitemap and robots.txt names none; Settings no longer links to a sitemap that would answer 404. A map the index does not announce answers 404 and is not cached.
* Sitemap: the addresses also work on sites with plain permalinks, the index answers right after the plugin is activated, and deactivating the plugin removes the rewrite rules of the maps.
* Sitemap: the cached maps are dropped when a post's noindex, canonical, video data or featured image is written by any means (an import, WP-CLI, the REST API), and when you change the "Show in search results" switch of a post type or the URL limit, not only when a post is saved. A bulk change drops them once.
* robots.txt: the physical robots.txt file that Rank Forge wrote is removed when the plugin is deactivated or deleted, only if it is still what Rank Forge wrote. The sitemap line is added unless your text already has the index line (a line for some other map no longer stands in for it), and the warning shown when robots.txt could not be written is printed again.
* Redirects: the automatic redirect made when a post's address changes uses the old address as it was, and the full 404 log takes a new frequent address instead of ignoring it.
* Redirects: a target that a browser would read as another site is no longer saved or followed: `http:/other.example`, `http:other.example`, `//` with no host, `/\other.example`, or an address with a tab or a line break inside. A target written as `//other.example/page` is an address on another host, so it needs "Allow redirect to external domain". Rules whose target is `mailto:`, `tel:` or another address that is not a web address no longer fire, and the Redirects list marks them. On a site in a sub-folder such as `/blog`, the address `/blog-post` is no longer taken for an address inside the folder.
* SEO score: the "paragraph over 150 words" check follows one rule in the score and in the live figure in the editor, and the score stored for a post matches the editor's. Inline tags no longer cut a paragraph in two, a block-level tag or a blank line ends one, as WordPress reads it, so classic-editor posts score like their HTML. A post with no words left once its shortcodes are taken out no longer gets a word count.
* Image SEO: alt text made from a file name drops the size, the suffixes WordPress adds and its counter, in any order; a short number counts as a counter only after a size or a suffix.
* Descriptions: the `{{excerpt}}` variable, the automatic description and the descriptions in the JSON-LD markup take the post text without its shortcodes instead of printing them as literal text, and a post that is one shortcode pair from start to end gets no description tag.
* The page `<title>` is escaped the same way as the meta title tag (Yoast still gets the raw text).
* Meta generation: when the AI was asked and did not answer, the stored SEO title and description stay as they were and the editor says so; the preview no longer offers a plain title as if the AI had written it.
* Schema: WooCommerce's own BreadcrumbList is dropped where Rank Forge prints one, as its Product markup already was. `sameAs` and `openingHours` of the Local Business markup are lists without empty items.
* Schema Builder: text in a script other than Latin (Russian, Greek, Arabic, Hindi and so on) in the forms of FAQ, Product, HowTo and the other types was stored as a row of codes like `u041f…`, and quotes and backslashes were lost. The data is now saved the way WordPress expects it. Entries saved before stay as they are: open the post, type the text in the form again and save to repair it.
* Other SEO plugins: Rank Math's description, robots, social tags and schema and Yoast's robots and schema are taken off while Rank Forge is active, and WordPress's own robots rules for search results and embeds stay in place when Rank Math clears them. AIOSEO is handled through its own filters, and the description it adds to a home page tagline is cut out of its block so the page keeps one description. SEOPress's social tags are removed by name, only the ones Rank Forge prints itself (`fb:app_id`, `fb:admins`, `twitter:site`, `twitter:creator`, `og:locale` and `article:*` stay).
* Other SEO plugins: their search engine verification codes are kept, and the canonical of another plugin or of WordPress is removed only on a page where Rank Forge prints one, so an attachment keeps the canonical of WordPress, Lang Forge or Yoast.
* Import from another SEO plugin: when the import is not set to overwrite, it fills only empty fields and never clears noindex; the source's title separator is carried over; a post that already has a title of ours is no longer skipped whole, the title stays and the empty fields are filled. AIOSEO's tags are replaced in their real `#name` form, and the ones Rank Forge cannot fill are dropped with the text between them kept.
* Sites that came from SEO Forge: a leftover `_seoforge_` row no longer doubles a live `_rankforge_` field, and a one-time repair merges the rows that were doubled. It works through the posts in small windows under a lock and marks itself done only after a clean pass over all of them.
* Deleting the plugin now also removes the term meta of categories and tags (noindex, nofollow, meta title and description), the Google Analytics property you chose and its label, the Search Console and Analytics connection flags, the Broken Links scan data and the flags of the rename repair. The robots.txt file Rank Forge wrote is removed too (only if it is still what Rank Forge wrote), also when the plugin is deleted while it is still active.
* Deactivating the plugin no longer leaves the hourly statistics event on the schedule, whether or not you agreed to usage statistics.
* Forge Suite: Fillin Forge (formerly Form Forge) has that name on its card, in the licence list, in the setup title and in the mail label; Clearway Forge's links lead to its own screens; Lang Forge's free plugin alone is shown in the licence list; Draft Forge's licence link goes to the Forge Suite screen (it led to a page you were not allowed to open).
* Forge Suite: the results CSV export ends after the file, so it holds the rows and not an HTML page. An installed plugin is taken for one of ours only by a known main file or by the product's text domain, so another vendor's plugin with a similar file name is not Cascade Forge. Setup & Health lists the products from the Suite list and counts a licence only when it holds a key. "PRO active on 1 of 1 plugin" uses the right singular and plural.
* Google sign-in: a connected site whose Google sign-in link cannot be made is told so (a message and a reload button) instead of being shown the Connect card, and "Try again" opens the page address without its anchor instead of reloading, so a page that came from a form post is not sent twice.
* Site Audit: when a run has no AI summary, the screen says why (the AI did not answer, the credits are used up, the site is not connected). This needs Rank Forge Pro 1.3.0.
* Connecting an Avakode account works on a site whose WordPress address differs from its site address (a Bedrock install, for example): the connection names the site by its home address and sends the WordPress address with every licence call.
* A failed answer from the AI service whose error is an object or a list no longer writes a PHP warning.
* New and reworded sentences are translated in all 15 languages.

= 1.2.10 =
* Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.
* Fixed: the title and description templates of categories, tags and custom taxonomies that were imported from Yoast SEO or Rank Math now apply to the archive of each term. Before, the archive ignored them and used the name and description of the term. A Meta Title or Meta Description typed on the term screen still comes first.
* Term archives keep their page number in the browser title. The new `{{page}}` variable ("Page 2", from page 2 on) can stand anywhere in a title template; a term archive title without it gets the separator and "Page N" at its end from page 2 on. The import turns the Yoast `%%page%%` and the Rank Math `%page%` into `{{page}}`.
* The import converts the other variables that Rank Forge has an equivalent for (such as the site tagline), removes the rest together with the separator next to them and lists in its report only what it removed. A variable that Rank Forge does not know is no longer printed with its braces in a title or description, as long as its name is made of letters, digits, `_` and `-`. The live preview in Title Templates does the same.
* A post title or a term name that holds a variable such as `{{page}}` or `{{siteName}}` is printed as typed, and a separator with spaces of its own no longer doubles them before "Page N".
* When AI credits run out, the message no longer promises a monthly reset and links to the page where you buy credits.
* Fixed: the Fix button for "No internal links" no longer says "Fixed!" when no link was inserted; it says "No links were added." and keeps the issue in the list.
* The Forge dashboard lists Cascade Forge and Inclusive Forge as available on wordpress.org. The plugin logo and icon use the new mark.
* The shared e-mail template carries a note for the wordpress.org code check; the e-mails it sends are unchanged.
* Two new sentences in all 15 translations; one sentence left the catalogue.

Older versions are listed in changelog.txt in the plugin folder.

== Upgrade Notice ==

= 1.5.0 =
Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before. A paid AI answer lost on the way back is given again, not bought again; update Rank Forge Pro to 1.5.0 as well for the full effect.

= 1.4.1 =
Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before. Fixes a PHP warning in the breadcrumbs of the WooCommerce shop page, and sites that switch WP-Cron off no longer get the request that wakes it.

= 1.4.0 =
Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before. Uninstall keeps your data unless "Delete Rank Forge data on uninstall" is selected.


= 1.3.0 =
Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before. Broken Links now scans every published post in the background and once a night, and a site set to discourage search engines no longer has a sitemap. Redirect targets that a browser reads as another site are refused.

= 1.2.10 =
Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before. Category, tag and custom taxonomy archives now use the title and description templates imported from Yoast SEO or Rank Math, so their titles can change.

= 1.2.9 =
Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before. With Pro 1.2.13 or newer, Performance and Content Decay now say when the add-on has no licence for Search Console, instead of asking you to connect Google.

= 1.2.8 =
Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before. With Pro 1.2.13, Content Decay and Performance say when Search Console data is not being loaded. A PHP 8.1 deprecation notice no longer reaches debug.log.

= 1.2.7 =
Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before. The site name is no longer printed as a product's brand: a shop that has not set a brand ends up without the brand property. Set the brand on the product or under Settings, Search Appearance.

= 1.2.6 =
Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before. Fixes: a Thumbnail URL and Description typed in the Video SEO box are kept when the Video URL is empty, and a redirect with an unsupported type shows an error instead of being saved as a 301.

= 1.2.5 =
Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before. Fixes: Auto-Link no longer says "Linked!" when it added nothing, 410 redirect rules answer 410 Gone, saving Settings keeps the settings it has no field for, and the Veterinarian and Locksmith schema types are real ones.

= 1.2.4 =
Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.
The AI buttons can now run on the credits of your Avakode account: connect it on the AI credits card in Rank Forge → Settings. Update Rank Forge Pro to 1.2.10 for the AI buttons to use a free trial or a connected account.

= 1.2.3 =
Deleting the plugin cleans up on every site of a network. If you run Rank Forge Pro, it must be 1.2.5 or newer.

= 1.2.2 =
The Google Search Console card in Settings, Integrations no longer states where the sign-in runs; the Connect Google button stays. robots.txt is written only where WordPress can write files directly. If you run Rank Forge Pro, it must be 1.2.5 or newer.

= 1.2.1 =
A shortcode that fails inside the FAQ, HowTo or Recipe markup can now be reported to your own log through a new action. If you run Rank Forge Pro, it must be 1.2.5 or newer.

= 1.2.0 =
The Dashboard's first card now runs the site-wide analysis and names your weakest post, and the AI Search Readiness report lists its strengths and suggestions. If you run Rank Forge Pro, it must be 1.2.5 or newer.

= 1.1.13 =
Deleting the plugin leaves the job queue shared by the Forge plugins alone while another one is still installed. If you run Rank Forge Pro, it must be 1.2.5 or newer.

= 1.1.12 =
Needs Rank Forge Pro 1.2.5 or newer if you run the add-on: the licence screen moved into it, and an older add-on stays switched off until it is updated. The editor shows no locked AI buttons.

= 1.1.11 =
Still needs Rank Forge Pro 1.2.0 or newer. The PRO badges follow whether the add-on is installed, and the add-on's screens check for it before they open.

= 1.1.10 =
Needs Rank Forge Pro 1.2.0 or newer: an older add-on is switched off whole rather than left running on an entitlement this version cannot honour. Links to Guard Forge, Velocity Forge and Flow Forge now point to their sites.

= 1.1.9 =
Fixes a fatal error on the post editor and three other screens for sites whose Pro add-on is inactive or older than 1.2.0. Needs Rank Forge Pro 1.2.0 or newer: an older add-on is switched off whole rather than left running on an entitlement this version cannot honour.

= 1.0.32 =
Adds a Support menu, optional anonymous analytics (off by default), and dashboard Pro tips.


= 1.0.29 =
Optional title "ideas" no longer counted as issues, clearer Google Indexing setup, and WordPress.org compliance fixes.

= 1.0.25 =
Licensing and WordPress.org compliance improvements.

= 1.0.0 =
Initial release.
