{"id":351728,"date":"2026-09-02T22:40:18","date_gmt":"2026-09-02T22:40:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/avakode-seoforge\/"},"modified":"2026-10-25T11:21:59","modified_gmt":"2026-10-25T11:21:59","slug":"rank-forge","status":"publish","type":"plugin","link":"https:\/\/bn-in.wordpress.org\/plugins\/rank-forge\/","author":23513346,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.0","stable_tag":"1.3.0","tested":"7.1.3","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Rank Forge \u2013 SEO Score, Schema, Sitemap & Redirects","header_author":"Avakode","header_description":"On-page SEO toolkit for WordPress: SEO score, meta box, SERP preview, schema markup, XML sitemap, robots.txt, redirects, image SEO, local business and video schema. Optional Pro add-on adds AI meta generation, Site Audit, GSC, and more.","assets_banners_color":"181c39","last_updated":"2026-10-25 11:21:59","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/avakode.com","header_plugin_uri":"https:\/\/rankforgewp.com","header_author_uri":"https:\/\/avakode.com","rating":0,"author_block_rating":0,"active_installs":10,"downloads":997,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.10":{"tag":"1.1.10","author":"avakodeforge","date":"2026-09-18 15:49:56","revision":3702282},"1.1.11":{"tag":"1.1.11","author":"avakodeforge","date":"2026-09-30 09:07:37","revision":3720778},"1.1.12":{"tag":"1.1.12","author":"avakodeforge","date":"2026-10-01 09:15:59","revision":3722759},"1.1.13":{"tag":"1.1.13","author":"avakodeforge","date":"2026-10-05 10:40:02","revision":3728676},"1.1.6":{"tag":"1.1.6","author":"avakodeforge","date":"2026-09-02 22:40:03","revision":3678750},"1.1.7":{"tag":"1.1.7","author":"avakodeforge","date":"2026-09-09 15:58:43","revision":3688617},"1.1.8":{"tag":"1.1.8","author":"avakodeforge","date":"2026-09-09 21:49:27","revision":3689045},"1.1.9":{"tag":"1.1.9","author":"avakodeforge","date":"2026-09-17 23:16:50","revision":3701099},"1.2.0":{"tag":"1.2.0","author":"avakodeforge","date":"2026-10-07 00:33:44","revision":3731706},"1.2.1":{"tag":"1.2.1","author":"avakodeforge","date":"2026-10-07 14:39:12","revision":3732812},"1.2.10":{"tag":"1.2.10","author":"avakodeforge","date":"2026-10-17 20:33:57","revision":3752346},"1.2.2":{"tag":"1.2.2","author":"avakodeforge","date":"2026-10-09 08:24:30","revision":3736196},"1.2.3":{"tag":"1.2.3","author":"avakodeforge","date":"2026-10-09 11:23:08","revision":3736489},"1.2.5":{"tag":"1.2.5","author":"avakodeforge","date":"2026-10-11 15:39:52","revision":3739704},"1.2.6":{"tag":"1.2.6","author":"avakodeforge","date":"2026-10-11 20:48:19","revision":3740113},"1.2.7":{"tag":"1.2.7","author":"avakodeforge","date":"2026-10-12 00:56:25","revision":3740319},"1.2.8":{"tag":"1.2.8","author":"avakodeforge","date":"2026-10-12 17:23:47","revision":3742232},"1.2.9":{"tag":"1.2.9","author":"avakodeforge","date":"2026-10-12 20:05:32","revision":3742452},"1.3.0":{"tag":"1.3.0","author":"avakodeforge","date":"2026-10-25 11:21:59","revision":3764414}},"upgrade_notice":{"1.3.0":"<p>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.<\/p>","1.2.10":"<p>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.<\/p>","1.2.9":"<p>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.<\/p>","1.2.8":"<p>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.<\/p>","1.2.7":"<p>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&#039;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.<\/p>","1.2.6":"<p>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.<\/p>","1.2.5":"<p>Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before. Fixes: Auto-Link no longer says &quot;Linked!&quot; 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.<\/p>","1.2.4":"<p>Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.<\/p>","1.2.3":"<p>The Dashboard screen shows its header and styles again. 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.<\/p>","1.2.2":"<p>The Google Search Console card in Settings, Integrations points to the add-on&#039;s own screen instead of drawing a sign-in button. 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.<\/p>","1.2.1":"<p>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.<\/p>","1.2.0":"<p>The Dashboard&#039;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.<\/p>","1.1.13":"<p>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.<\/p>","1.1.12":"<p>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.<\/p>","1.1.11":"<p>Still needs Rank Forge Pro 1.2.0 or newer. The PRO badges follow whether the add-on is installed, and the add-on&#039;s screens check for it before they open.<\/p>","1.1.10":"<p>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.<\/p>","1.1.9":"<p>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.<\/p>","1.0.32":"<p>Adds a Support menu and dashboard Pro tips.<\/p>","1.0.29":"<p>Optional title &quot;ideas&quot; no longer counted as issues, clearer Google Indexing setup, and WordPress.org compliance fixes.<\/p>","1.0.25":"<p>Licensing and WordPress.org compliance improvements.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3748975,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3748975,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3748975,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3748975,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.10","1.1.11","1.1.12","1.1.13","1.1.6","1.1.7","1.1.8","1.1.9","1.2.0","1.2.1","1.2.10","1.2.2","1.2.3","1.2.5","1.2.6","1.2.7","1.2.8","1.2.9","1.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3720770,"resolution":"1","location":"assets","locale":"","width":1280,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3720770,"resolution":"2","location":"assets","locale":"","width":1280,"height":1000},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3720770,"resolution":"3","location":"assets","locale":"","width":1280,"height":1000},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3720770,"resolution":"4","location":"assets","locale":"","width":1280,"height":1000},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3720770,"resolution":"5","location":"assets","locale":"","width":1280,"height":1000},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3720770,"resolution":"6","location":"assets","locale":"","width":1280,"height":1000}},"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 search engines read, with a preview people can read too."}},"plugin_section":[262246],"plugin_tags":[2988,1117,186,240424,1557],"plugin_category":[55,57],"plugin_contributors":[273812],"plugin_business_model":[],"class_list":["post-351728","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-meta-tags","plugin_tags-schema","plugin_tags-seo","plugin_tags-serp-preview","plugin_tags-sitemap","plugin_category-seo-and-marketing","plugin_category-taxonomy","plugin_contributors-avakodeforge","plugin_committers-avakodeforge"],"banners":{"banner":"https:\/\/ps.w.org\/rank-forge\/assets\/banner-772x250.png?rev=3748975","banner_2x":"https:\/\/ps.w.org\/rank-forge\/assets\/banner-1544x500.png?rev=3748975","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/rank-forge\/assets\/icon-128x128.png?rev=3748975","icon_2x":"https:\/\/ps.w.org\/rank-forge\/assets\/icon-256x256.png?rev=3748975","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/rank-forge\/assets\/screenshot-1.png?rev=3720770","caption":"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."},{"src":"https:\/\/ps.w.org\/rank-forge\/assets\/screenshot-2.png?rev=3720770","caption":"The checks behind the score: the issues that cost points and optional ideas, each in plain words."},{"src":"https:\/\/ps.w.org\/rank-forge\/assets\/screenshot-3.png?rev=3720770","caption":"Schema markup for the post, detected as an Article, with every field filled from the content and editable."},{"src":"https:\/\/ps.w.org\/rank-forge\/assets\/screenshot-4.png?rev=3720770","caption":"The dashboard: what to fix first, the score across all posts and the most common issues."},{"src":"https:\/\/ps.w.org\/rank-forge\/assets\/screenshot-5.png?rev=3720770","caption":"Redirects with their hit counts, one created automatically when a post's slug changed, and the missing pages visitors asked for."},{"src":"https:\/\/ps.w.org\/rank-forge\/assets\/screenshot-6.png?rev=3720770","caption":"The XML sitemap search engines read, with a preview people can read too."}],"raw_content":"<!--section=description-->\n<p><strong>Rank Forge<\/strong> is a modern SEO plugin built around a single insight: an SEO score is only useful if it tells you exactly what to do next. The post-edit metabox gives you a 0-100 SEO score, a SERP preview, focus-keyword analysis, and an editable meta title \/ description \/ schema \u2014 all from one screen, with no account or API key required.<\/p>\n\n<p>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. The only requests it makes are the two listed under External services: the Broken Links scan, when you start it, and the check of your own site's robots.txt. The optional <strong>Pro add-on<\/strong> layers AI on top \u2014 one-click AI meta generation, content optimization, and schema detection \u2014 plus Google Search Console, Site Audit, A\/B testing and auto internal links.<\/p>\n\n<h4>Free<\/h4>\n\n<ul>\n<li>On-page SEO score (0-100) per post<\/li>\n<li>SERP preview<\/li>\n<li>Focus keyword analysis<\/li>\n<li>XML sitemap<\/li>\n<li>robots.txt editor<\/li>\n<li>Basic schema markup (Article, BlogPosting) and the visual Schema Builder<\/li>\n<li>Noindex \/ nofollow per post<\/li>\n<li>Redirect manager (301, 302, 307) with 404 log<\/li>\n<li>Broken-link scanner across all published content (SSRF-pinned for safety)<\/li>\n<li>Image SEO \u2014 automatic alt text and a bulk no-alt report<\/li>\n<li>Local Business schema (LocalBusiness \/ NAP \/ opening hours)<\/li>\n<li>Video SEO \u2014 VideoObject schema and a video sitemap<\/li>\n<li>Coexists with Yoast \/ Rank Math \/ AIOSEO \/ SEOPress during migration<\/li>\n<\/ul>\n\n<h4>Rank Forge Pro<\/h4>\n\n<p>Pro is a separate add-on plugin, distributed from https:\/\/rankforgewp.com and not\nincluded in this download. Everything listed above is part of this plugin and\nworks without it.<\/p>\n\n<ul>\n<li>AI meta generation (title, description, focus keyword)<\/li>\n<li>AI content expansion \/ simplification \/ external-link suggestions<\/li>\n<li>Internal link suggestions and automatic internal linking<\/li>\n<li>Google Search Console integration (rankings, indexing requests)<\/li>\n<li>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)<\/li>\n<li>Content brief, content decay and the content optimizer<\/li>\n<li>A\/B testing for titles + descriptions<\/li>\n<li>Priority email support with an active Pro licence<\/li>\n<\/ul>\n\n<p>Part of the <strong>Forge Suite<\/strong>: twelve WordPress and WooCommerce plugins by Avakode, including Lang Forge, Form Forge and Field Forge.<\/p>\n\n<h3>External services<\/h3>\n\n<p>Rank Forge can make outbound HTTP requests. Nothing is sent until you use the feature that sends it: activating the plugin does not contact any server and does not schedule anything that would. 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.<\/p>\n\n<ul>\n<li><strong>The sites your content links to<\/strong> \u2014 only when you start a Broken Links scan (Rank Forge \u2192 Tools \u2192 Broken Links), 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, and nothing is checked until you start the scan.<\/li>\n<li><strong>Your own site's robots.txt<\/strong> \u2014 only when an administrator opens a Rank Forge screen that shows the status of robots.txt (Settings, Robots.txt), the plugin fetches <code>\/robots.txt<\/code> 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.<\/li>\n<\/ul>\n\n<p>Search Console, Analytics and Indexing, and the AI features, belong to the separate Rank Forge Pro add-on, which describes the services it uses in its own documentation. This plugin has no analytics, no telemetry and no licensing calls of its own.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload <code>rankforge<\/code> to <code>\/wp-content\/plugins\/<\/code>, or install via Plugins \u2192 Add New.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open any post \/ page \u2014 the Rank Forge metabox appears below the editor.<\/li>\n<li>(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.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20rank%20forge%20conflict%20with%20yoast%20or%20rank%20math%3F\"><h3>Will Rank Forge conflict with Yoast or Rank Math?<\/h3><\/dt>\n<dd><p>No. Rank Forge detects the active SEO plugin and suppresses its own meta output until you fully migrate. Use <strong>Rank Forge \u2192 Migration<\/strong> when ready.<\/p><\/dd>\n<dt id=\"does%20the%20seo%20score%20use%20ai%3F\"><h3>Does the SEO score use AI?<\/h3><\/dt>\n<dd><p>The score itself is deterministic (keyword density, readability, internal links, image alt, etc.). AI is only used for generation actions (meta, schema, content expansion) when you click \"Generate with AI\".<\/p><\/dd>\n<dt id=\"how%20are%20redirects%20stored%3F\"><h3>How are redirects stored?<\/h3><\/dt>\n<dd><p>In a custom table (<code>wp_rankforge_redirects<\/code>) \u2014 not in <code>wp_options<\/code> like some plugins. This avoids the autoload-bloat that hurts your TTFB.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>Redirects: a target that a browser would read as another site is no longer saved or followed: <code>http:\/other.example<\/code>, <code>http:other.example<\/code>, <code>\/\/<\/code> with no host, <code>\/\\other.example<\/code>, or an address with a tab or a line break inside. A target written as <code>\/\/other.example\/page<\/code> is an address on another host, so it needs \"Allow redirect to external domain\". Rules whose target is <code>mailto:<\/code>, <code>tel:<\/code> 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 <code>\/blog<\/code>, the address <code>\/blog-post<\/code> is no longer taken for an address inside the folder.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>Descriptions: the <code>{{excerpt}}<\/code> 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.<\/li>\n<li>The page <code>&lt;title&gt;<\/code> is escaped the same way as the meta title tag (Yoast still gets the raw text).<\/li>\n<li>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.<\/li>\n<li>Schema: WooCommerce's own BreadcrumbList is dropped where Rank Forge prints one, as its Product markup already was. <code>sameAs<\/code> and <code>openingHours<\/code> of the Local Business markup are lists without empty items.<\/li>\n<li>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 <code>u041f\u2026<\/code>, 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.<\/li>\n<li>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 (<code>fb:app_id<\/code>, <code>fb:admins<\/code>, <code>twitter:site<\/code>, <code>twitter:creator<\/code>, <code>og:locale<\/code> and <code>article:*<\/code> stay).<\/li>\n<li>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.<\/li>\n<li>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 <code>#name<\/code> form, and the ones Rank Forge cannot fill are dropped with the text between them kept.<\/li>\n<li>Sites that came from SEO Forge: a leftover <code>_seoforge_<\/code> row no longer doubles a live <code>_rankforge_<\/code> 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.<\/li>\n<li>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.<\/li>\n<li>Deactivating the plugin no longer leaves the hourly statistics event on the schedule, whether or not you agreed to usage statistics.<\/li>\n<li>New and reworded sentences are translated in all 15 languages.<\/li>\n<\/ul>\n\n<h4>1.2.10<\/h4>\n\n<ul>\n<li>Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.<\/li>\n<li>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.<\/li>\n<li>Term archives keep their page number in the browser title. The new <code>{{page}}<\/code> 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 <code>%%page%%<\/code> and the Rank Math <code>%page%<\/code> into <code>{{page}}<\/code>.<\/li>\n<li>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, <code>_<\/code> and <code>-<\/code>. The live preview in Title Templates does the same.<\/li>\n<li>A post title or a term name that holds a variable such as <code>{{page}}<\/code> or <code>{{siteName}}<\/code> is printed as typed, and a separator with spaces of its own no longer doubles them before \"Page N\".<\/li>\n<li>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.<\/li>\n<li>The Forge dashboard lists Cascade Forge and Inclusive Forge as available on wordpress.org. The plugin logo and icon use the new mark.<\/li>\n<li>The shared e-mail template carries a note for the wordpress.org code check; the e-mails it sends are unchanged.<\/li>\n<li>Two new sentences in all 15 translations; one sentence left the catalogue.<\/li>\n<\/ul>\n\n<h4>1.2.9<\/h4>\n\n<ul>\n<li>Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.<\/li>\n<li>Fixed: when the Rank Forge Pro add-on is active but its licence does not cover Search Console, Performance and Content Decay told you to connect Google Search Console, which could not load any data. They now say that the licence is missing and link to the add-on's licence page, whether or not Google is connected. This needs Rank Forge Pro 1.2.13 or newer.<\/li>\n<li>Content Decay: when no Search Console data has been loaded yet and none is waiting to load, the screen now says so and offers a \"Load Search Console data now\" button, instead of sending you to Performance. This needs Rank Forge Pro 1.2.13 or newer; with an older add-on the previous text stays.<\/li>\n<\/ul>\n\n<h4>1.2.8<\/h4>\n\n<ul>\n<li>Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.<\/li>\n<li>Content Decay and Performance: when the Pro add-on does not load Search Console data on the site, the screen says so, gives the reason and links to the add-on's licence page, instead of telling you to click a Refresh button that starts nothing. Performance hides its Refresh button then. The message needs Rank Forge Pro 1.2.13.<\/li>\n<li>Fixed: in the edition distributed through avakode.com, with debug logging on, wp-admin no longer writes \"_load_textdomain_just_in_time was called incorrectly\" notices for this plugin on every request.<\/li>\n<li>Fixed: on PHP 8.1 and later the plugin no longer writes \"trim(): Passing null to parameter\" deprecations to debug.log on every front-end request of a site installed at the root, or on a request for an address with no path (such as \/\/).<\/li>\n<li>Fixed: deleting the plugin now also removes the end date and the saved Search Console comparison that A\/B tests keep on posts (not when you chose to keep the data).<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.<\/li>\n<li>Product markup: a product's brand now comes from its own brand (WooCommerce Brands, Perfect Brands for WooCommerce or YITH WooCommerce Brands), a \"brand\" product attribute, or the new Default brand field under Settings, Search Appearance. The name of your site is no longer printed as the brand, so a shop that has not set a brand now prints no brand property.<\/li>\n<li>Product markup: the GTIN set on the product in WooCommerce is printed as gtin8, gtin12, gtin13 or gtin14, by its length; a number of any other length is not printed.<\/li>\n<li>Product markup: new MPN field next to the SKU on the product's Inventory tab (a product attribute named \"mpn\" works too), printed as mpn.<\/li>\n<li>Product markup: every offer with a price now says until when the price holds: the end of a running sale, otherwise 31 December of next year.<\/li>\n<li>Product markup: new Product Markup card under Settings, Search Appearance with shipping details (country, cost or free shipping, handling and delivery days). They are printed only when every field is filled in, and not for virtual or external products.<\/li>\n<li>Product markup: the same card holds the return policy (country, days, method, who pays for return shipping), printed only when every field is filled in, and not for virtual or external products.<\/li>\n<li>A\/B test (Rank Forge Pro): the meta title, Open Graph title and Twitter title now come from one place, so a Variant B title can reach all of them. A title typed by hand for Open Graph or Twitter still wins.<\/li>\n<li>Content Decay: the empty-state text and button now send you to Performance, the screen that exists, instead of Rankings.<\/li>\n<li>Performance and Content Decay show when Search Console data is loading, why a load failed (with a Try again button), or that a property still has to be chosen.<\/li>\n<li>Hints about connecting Google open the screen that has the Connect Google button; the dashboard card appears only when the connection is available.<\/li>\n<li>Site Audit: WooCommerce products show their type in the list; the AI works out a product's focus keyword from its name, short description and description.<\/li>\n<li>Site Audit: the AI never rewrites the description of a product; a fix that would write it says so and changes nothing. The AI can write a product's meta title, meta description and focus keyword.<\/li>\n<li>Fixed: bulk fixes no longer strip backslashes from the content they save, and an applied meta title, description or focus keyword keeps its backslashes.<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.<\/li>\n<li>Video SEO: a Thumbnail URL or Description typed in the Video SEO box is no longer replaced by an automatic one when the Video URL field is empty and the post has a video in it. A field left empty still takes the automatic value.<\/li>\n<li>Redirects: saving a redirect with a type that is not supported now shows an error instead of storing a rule that visitors got as a 301. Rules saved earlier are not changed.<\/li>\n<li>Schema Builder: choosing a schema type (Event, Review, WebPage, VideoObject and so on) without filling in a form no longer replaces the automatic schema of the page with an empty type. A chosen Review, Event, VideoObject or Product now prints only when the post has what it needs (a rating from 1 to 5, a start date, a video address, a price), and a Review no longer gets a rating of 5 that nobody gave.<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.<\/li>\n<li>Auto-Link (Pro add-on): when no internal link could be added, the button no longer says \"Linked!\" and reloads the page; it shows why nothing was added and leaves the post as it was.<\/li>\n<li>Redirects: a rule of type 410 (Gone), for example one imported from SEOPress, now answers \"410 Gone\" with your theme's 404 page. Before, the visitor saw a WordPress error page.<\/li>\n<li>Settings: saving the Settings screen no longer deletes settings that have no field on it, such as the switch that turns off the cleaning of image file names.<\/li>\n<li>Local SEO: the Veterinarian and Locksmith business types now use the real schema.org types (VeterinaryCare and Locksmith); the old names are not schema.org types, so search engines skipped them. A type saved earlier is carried over by itself.<\/li>\n<li>Local SEO: saving the form no longer drops the business image address that an import or code had set, so \"image\" stays in the markup.<\/li>\n<li>Content Brief (Pro add-on): the heading structure and the target word count of a brief now show on the screen, in new briefs and in saved ones.<\/li>\n<li>Video schema: embedUrl now belongs to the same video as contentUrl, not to another video on the page.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Needs Rank Forge Pro 1.2.5 or newer if you run the add-on, as before.<\/li>\n<li>The AI buttons on the Local SEO and Schema screens, the Fix buttons in the SEO box and its \"AI-Powered\" mark show only while Rank Forge Pro reports its AI features running, so no button leads to \"Pro add-on is not running\".<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Fix: the Dashboard screen shows its header and styles again.<\/li>\n<li>Deleting the plugin now cleans up on every site of a network, not only the main one. When it is the last Forge product on the site, everything the Forge plugins keep in common goes too; while another Forge product is still installed, that shared data stays for it.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>robots.txt: the physical \/robots.txt file is now written only through WordPress's own file API, and only where WordPress can write to the site root directly. On a host that would ask for FTP details nothing is written and no credentials are requested; the screen then says WordPress is not allowed to write there and what to do (delete the file over FTP or in the hosting control panel, and Rank Forge serves the robots.txt built from your settings).<\/li>\n<li>The Google Search Console card (Settings, Integrations) no longer carries a sentence about where the sign-in runs, and this package draws no sign-in button on it: with the Rank Forge Pro add-on active the card points to the add-on's Analytics &amp; Traffic screen, where Google is connected; without the add-on it names the add-on and links to its page, as before.<\/li>\n<li>Two admin messages (the status line of the AI features and the hint for a robots.txt that visitors get from somewhere else) and the code comments are reworded to say what happens for you. Nothing the plugin does has changed.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>When a shortcode in an FAQ answer or in a HowTo or Recipe step throws while Rank Forge builds the schema markup, the fragment still goes in with its shortcodes stripped, as before, and the new action <code>rankforge_schema_shortcode_failed<\/code> now tells your site, with what was thrown, the post and the fragment. Nothing is written to a log by default: hook your own logging onto the action if you want to know. What a handler prints stays out of the page head, and an error it throws goes no further.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>The Dashboard's first card runs the site-wide analysis on the card itself, with its progress, and then names your weakest post, its main issue and a link to its editor, instead of sending you to Settings. While only some of your posts have a score it shows \u201cN of M analyzed\u201d rather than \u201cNo urgent fixes\u201d, and \u201cAnalyze the remaining\u201d finishes an interrupted run without starting over.<\/li>\n<li>The site-wide analysis, from that card and from Settings \u2192 Automation, now covers every type of post Rank Forge analyzes (pages, products and other public types, not only posts) and any number of them, instead of the first 100 posts. It no longer fails on a site in a sub-directory or with plain permalinks. Posts that cannot be analyzed are counted with a link to the first one, and failed requests get a \u201cTry again\u201d button.<\/li>\n<li>The Dashboard's \u201cposts without description\u201d and \u201cposts without keyword\u201d counts cover the same post types as the analysis (products and other custom types included, not only posts and pages), and a post you cannot edit is listed without a link.<\/li>\n<li>The Dashboard cards \u201cAdd missing meta descriptions\u201d and \u201cSet focus keywords\u201d open the posts they counted: the list of the post type with the most of them, with a line saying what is shown and a \u201cShow all\u201d link, and the other types that have such posts as links with their counts. The list stays narrowed when you search or filter it.<\/li>\n<li>\u201cMost common issues\u201d on the Dashboard counts each check once, in your language: the same check with other numbers in its text used to be several lines, and a site analyzed in two languages showed every check twice.<\/li>\n<li>The XML sitemap writes every <code>&lt;lastmod&gt;<\/code> in UTC. On a site set to a time zone behind UTC the dates ran ahead of the real time, and search engines can ignore a date in the future. A post without a valid modified date has no <code>&lt;lastmod&gt;<\/code>.<\/li>\n<li>The \u201cAI Search Readiness\u201d report that the Pro add-on runs from the post editor now lists its strengths and suggestions under the score (only the score showed until now), and shows them as plain text.<\/li>\n<li>The automatic FAQ markup and the HowTo and Recipe steps now contain what the page shows: shortcodes in a question, answer or step are rendered before the tags are removed, and words in separate blocks no longer run together. The answer to the last question now has an end: it stops at a form, aside, navigation or footer and keeps its first 150 words. A shortcode that throws or prints can no longer break the page head. The <code>rankforge_schema_render_shortcodes<\/code> filter turns the rendering off.<\/li>\n<li>The Indexing tab of the Analytics section no longer opens \u201cSorry, you are not allowed to access this page.\u201d when the Pro add-on is active without a licence; the screen that names the add-on is shown instead.<\/li>\n<li>New filter <code>rankforge_canonical_url<\/code>: another plugin can change a post's custom canonical URL, or withdraw it by returning an empty string, in which case Rank Forge prints no canonical tag for that post.<\/li>\n<\/ul>\n\n<h4>1.1.13<\/h4>\n\n<ul>\n<li>Deleting the plugin leaves the job queue the Forge plugins share in place while another Forge plugin or add-on is still on the site. The check used to miss add-ons, and Rank Forge installed from wordpress.org, so the queue could be dropped while a neighbour still had jobs in it.<\/li>\n<li>The readme no longer says the XML sitemap is hreflang-aware when Lang Forge is active: the sitemap lists no language alternates, with or without Lang Forge.<\/li>\n<\/ul>\n\n<h4>1.1.12<\/h4>\n\n<ul>\n<li><strong>This release needs Rank Forge Pro 1.2.5 or newer if you run the add-on.<\/strong> The licence screen, the upgrade prompt and the upgrade banner moved into the separate Rank Forge Pro add-on; this plugin only notes which features the add-on provides, with a link to its product page. An older add-on stays switched off until it is updated, and an admin notice names both versions. Nothing already saved is changed.<\/li>\n<li>The post editor shows no AI buttons unless the add-on runs them \u2014 no locked \"AI\" buttons and no upsell dialog. One line under the SEO title and description says where the AI suggestions come from.<\/li>\n<li>Settings no longer link to an upgrade: the AI, auto internal linking and Google Search Console sections say that they come with the add-on.<\/li>\n<li>The screens the add-on provides (Google Search Console, Site Audit, Content Brief) name it, with a link, instead of showing a locked page.<\/li>\n<\/ul>\n\n<h4>1.1.11<\/h4>\n\n<ul>\n<li>The PRO badge in the menu and in the section tabs marks a screen the Rank Forge Pro add-on provides and this site does not have. It follows whether the add-on is installed, not the licence.<\/li>\n<li>The screens the add-on provides check for it themselves before they open, not only through the menu entry that leads to them. No visible change.<\/li>\n<li>The wordpress.org package no longer loads bundled translation files it does not carry: its translations arrive as language packs, which WordPress loads by itself.<\/li>\n<\/ul>\n\n<h4>1.1.10<\/h4>\n\n<ul>\n<li>No change in this package: the release updated parts that ship only in the edition distributed through avakode.com.<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>Screens that need the paid add-on now check that its code is actually installed instead of trusting the licence. On a site whose licence is live but whose add-on is inactive or older than this release, the Search Engine Submission panel, the AI actions in the editor, the content optimiser and the automatic internal links could end a request with a fatal error; they now fall back to what this plugin does on its own.<\/li>\n<li>The price badge on AI buttons is drawn only where the credits widget exists, so the button itself no longer depends on it.<\/li>\n<li>Deleting the last Forge product on a site now clears the job queue the Forge plugins share \u2014 its table, its two scheduled events and its version marker. While any other Forge product is still installed, deleting this one leaves the queue exactly as it is, because the pending jobs in those rows are that product's too.<\/li>\n<li>A Rank Forge Pro add-on older than 1.2.0 is switched off instead of left running on an entitlement this version can no longer check, and an admin notice names the version you have, the version you need and what is unavailable until you update. Nothing already published is rewritten and your settings are kept.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>No change in this package: the release updated parts that ship only in the edition distributed through avakode.com.<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>No change in this package: the release updated parts that ship only in the edition distributed through avakode.com.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Smaller package and one less admin surface: the SDK\u2019s own menu, opt-in screen and promotional notices are gone.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>No change in this package: the release updated parts that ship only in the edition distributed through avakode.com.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>No change in this package: the release updated parts that ship only in the edition distributed through avakode.com.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Generated CSS and JavaScript is assembled as a string instead of being captured through an output buffer, so the plugin no longer opens a buffer that another component's hook could interleave with.<\/li>\n<li>Menu pages decide what to show by whether the class that renders them is loaded, not by asking the licence. Redirects and Local SEO ship in this download and now open with no check at all.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>The custom canonical tag is now printed directly at its hook. The plugin used to buffer the entire head output between two hooks so competing canonical tags could be stripped from it; that buffer is gone. WordPress core's canonical is still suppressed while a per-post custom canonical is set, and Yoast's through its filter, so the URL you set is still the one that ships.<\/li>\n<li>Every value handed from PHP to inline JavaScript is JSON-encoded with hex escaping for the characters that could end a script block, so translations and settings can never terminate the tag they sit in.<\/li>\n<li>The bulk AI-fix endpoint no longer raises the PHP memory limit \u2014 its capped, sequential work never needed the headroom.<\/li>\n<li>Removed an unused helper that assigned window globals.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>CSS and JavaScript that screens build from PHP state now go through the WordPress enqueue API instead of being written into the page as tags, so other code can deregister, reorder or defer them.<\/li>\n<li>Filenames: uploads are cleaned only for images, and only for files you actually upload. The rule used to apply to every filename WordPress touched, and it stripped non-Latin scripts entirely \u2014 a file named in Russian, Japanese or Greek came out as a timestamp. Accented Latin now transliterates, and a name that leaves nothing behind is kept as WordPress sanitised it. Add 'image_filename_cleanup' =&gt; false to the settings to turn it off.<\/li>\n<li>The sitemap stylesheet is located from the plugin's own file rather than a hardcoded directory name, so it resolves whatever folder the plugin is installed under.<\/li>\n<li>Publishing robots.txt no longer empties the whole LiteSpeed cache; only the robots.txt URL is purged.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>The plugin is now called Rank Forge. Nothing about what it does has changed; the name did.<\/li>\n<li>Everything the old name stored is carried over on first load: the analysis, redirect and breadcrumb tables, every setting, and the SEO fields on every post. Redirects keep working, stored analyses stay, and the meta on your posts stays. If the takeover is interrupted it resumes on the next request rather than half-applying.<\/li>\n<li>Scheduled jobs left under the old names are unscheduled, and the old cached values are dropped so they regenerate under the new ones.<\/li>\n<\/ul>\n\n<h4>1.0.40<\/h4>\n\n<ul>\n<li>Removed the last licence checks that stood over code shipped in this download. The settings screen asked the licence before writing two flags, \"auto_meta\" and \"internal_links_enabled\" \u2014 neither was ever read by anything, while the meta generation they appeared to control (title and description templates, canonical URLs, Open Graph tags; no external calls) is part of this plugin and has always run for everyone. Both flags are gone rather than merely ungated.<\/li>\n<li>Auto internal linking, Search Console and Site Audit now show as unavailable based on whether their implementation is loaded, not on a licence call. Those three  \u2026<\/li>\n<\/ul>","raw_excerpt":"SEO score, meta, schema and sitemap for WordPress: meta box, SERP preview, robots.txt, redirects, image SEO. A Yoast-compatible SEO plugin.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/351728","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=351728"}],"author":[{"embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/avakodeforge"}],"wp:attachment":[{"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=351728"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=351728"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=351728"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=351728"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=351728"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=351728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}