{"id":339872,"date":"2026-07-26T15:32:48","date_gmt":"2026-07-26T15:32:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/nexal-seo\/"},"modified":"2026-07-26T15:32:40","modified_gmt":"2026-07-26T15:32:40","slug":"nexal-seo","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/nexal-seo\/","author":23526188,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.8","stable_tag":"1.3.8","tested":"7.0.2","requires":"5.6","requires_php":"7.2","requires_plugins":null,"header_name":"Nexal SEO","header_author":"Nexal","header_description":"Lightweight Semantics SEO plugin. Set a focus keyword, SEO title and meta description for posts, pages, WooCommerce products, categories and tags.","assets_banners_color":"","last_updated":"2026-07-26 15:32:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/nexalseo.com","header_author_uri":"https:\/\/canopuswebagency.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":50,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.8":{"tag":"1.3.8","author":"canopuswebagency26","date":"2026-07-26 15:32:40"}},"upgrade_notice":{"1.3.8":"<p>Fixes the SEO title\/meta description set on a static homepage (via the Snippet editor) being ignored in favour of the global Homepage settings.<\/p>","1.3.7":"<p>Security &amp; compliance hardening for the WordPress.org review: full input sanitisation, a prepared analytics query, a nonce-checked redirections notice, no bundled translation files, and documented outbound help links. No functional changes.<\/p>","1.3.6":"<p>Adds first-party Visitors analytics (opt-in, no IPs) and an AI category-description generator, plus schema and compliance improvements.<\/p>","1.26.2":"<p>Webmaster Tools no longer fetches live data automatically on page load (manual refresh only); a new uninstall.php now fully cleans up on plugin deletion.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3623581,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3623581,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":{"nexal-seo\/faq":{"name":"nexal-seo\/faq","title":"FAQ (Nexal SEO)"}},"tagged_versions":["1.3.8"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[262246],"plugin_tags":[5777,16192,1117,186,286],"plugin_category":[45,55],"plugin_contributors":[273370],"plugin_business_model":[],"class_list":["post-339872","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-meta-description","plugin_tags-meta-title","plugin_tags-schema","plugin_tags-seo","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-seo-and-marketing","plugin_contributors-canopuswebagency26","plugin_committers-canopuswebagency26"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/nexal-seo\/assets\/icon-128x128.png?rev=3623581","icon_2x":"https:\/\/ps.w.org\/nexal-seo\/assets\/icon-256x256.png?rev=3623581","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Nexal SEO is a fast, no-bloat SEO plugin for posts, pages, WooCommerce products, categories and tags. It ships as a modular dashboard so your site only loads the code for the features you actually turn on.<\/p>\n\n<p><strong>Titles &amp; Meta<\/strong><\/p>\n\n<ul>\n<li>Focus keyword, SEO title and meta description per post\/page\/product\/term.<\/li>\n<li>Live Google-style snippet preview with character counters.<\/li>\n<li>Homepage title\/description overrides.<\/li>\n<\/ul>\n\n<p><strong>Semantic content analysis (free, fully local)<\/strong><\/p>\n\n<ul>\n<li>Topical Completeness \u2014 compares your content against other posts in the same category using local TF-IDF, no external calls.<\/li>\n<li>Cluster Health \u2014 checks internal linking and anchor-text quality within the category.<\/li>\n<li>Semantic Structure \u2014 heading hierarchy checks (H1 uniqueness, H2\u2013H4 nesting, keyword variation), shown live in the block editor sidebar.<\/li>\n<li>A 0\u2013100 score is computed locally and shown as a column on your post list.<\/li>\n<\/ul>\n\n<p><strong>Social<\/strong><\/p>\n\n<ul>\n<li>Open Graph and Twitter Card tags with a default social image.<\/li>\n<\/ul>\n\n<p><strong>XML Sitemap, Redirections &amp; 404 Monitor<\/strong><\/p>\n\n<ul>\n<li>XML Sitemap (index + per post type\/taxonomy).<\/li>\n<li>Redirections manager (301\/302\/307\/410) with regex matching, search, and CSV import\/export.<\/li>\n<li>404 Monitor with one-click redirect creation and daily auto-clean.<\/li>\n<\/ul>\n\n<p><strong>Schema \/ Structured Data<\/strong><\/p>\n\n<ul>\n<li>Connected-entity JSON-LD <code>@graph<\/code> (Organization, WebSite, Article, Product, BreadcrumbList and more) instead of disconnected snippets.<\/li>\n<li>Breadcrumbs via <code>[nexal_breadcrumbs]<\/code> shortcode or <code>nexal_seo_breadcrumbs()<\/code>.<\/li>\n<\/ul>\n\n<p><strong>Local SEO<\/strong><\/p>\n\n<ul>\n<li>LocalBusiness structured data, NAP (name\/address\/phone) consistency scanner across your site, and a geo\/local-SEO checklist.<\/li>\n<\/ul>\n\n<p><strong>WooCommerce<\/strong><\/p>\n\n<ul>\n<li>Detect-only store audit (thin descriptions, missing category copy) for shops running WooCommerce.<\/li>\n<\/ul>\n\n<p><strong>Optional AI assist (bring your own API key)<\/strong><\/p>\n\n<ul>\n<li>Off by default. If you turn it on and paste your own key for Google Gemini, Groq, OpenRouter, OpenAI or Anthropic, Nexal SEO can suggest related terms\/topics and run an AI-assisted NAP consistency check. No key, no request \u2014 see \"External services\" below.<\/li>\n<\/ul>\n\n<p><strong>Setup Wizard<\/strong><\/p>\n\n<ul>\n<li>Guided first-run configuration.<\/li>\n<\/ul>\n\n<p><strong>Translations<\/strong><\/p>\n\n<ul>\n<li>Fully internationalized (i18n) and translation-ready. Translations are managed through translate.wordpress.org, so any locale the community translates is delivered automatically as a WordPress language pack \u2014 no files are bundled with the plugin. The local semantic analysis engine and the optional AI n-gram\/question suggestions also follow your site's configured language (stop-word filtering and question-style heading detection cover English, French, German, Spanish, Russian and Arabic; the AI prompt explicitly asks for output in your site's language).<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>Nexal SEO makes no outbound network requests by default. The following integration is entirely opt-in, uses your own credentials, and only runs when you explicitly trigger it (never automatically on page load, cron, or plugin activation):<\/p>\n\n<p><strong>AI providers (bring your own key)<\/strong> \u2014 off by default. If you enable AI in Settings \u2192 AI and paste your own API key, Nexal SEO sends a request to the ONE provider you selected only when you explicitly trigger an AI-assisted feature (topic\/term suggestions, \"Questions to answer\", the \"Verify with AI\" NAP consistency check, the AI category-description generator, the AI snippet generator, and \"Write with AI\" for llms.txt). Nothing is sent automatically on page load, cron, or activation, and no request is ever made without a key.<\/p>\n\n<p>What is sent: only the text needed for the requested feature \u2014 e.g. your focus keyword, the current post\/page content or excerpt, a category name and its product\/post titles, or (for the llms.txt draft) your site name\/tagline, Schema identity fields and your published titles\/URLs\/excerpts. No IP addresses, credentials, or full data exports are sent.<\/p>\n\n<p>You choose a single provider; only that provider is contacted. Their terms and privacy policies:<\/p>\n\n<ul>\n<li>Google Gemini \u2014 Terms: https:\/\/ai.google.dev\/gemini-api\/terms \u00b7 Privacy: https:\/\/policies.google.com\/privacy<\/li>\n<li>Groq \u2014 Terms: https:\/\/groq.com\/terms-of-use\/ \u00b7 Privacy: https:\/\/groq.com\/privacy-policy\/<\/li>\n<li>OpenRouter \u2014 Terms: https:\/\/openrouter.ai\/terms \u00b7 Privacy: https:\/\/openrouter.ai\/privacy<\/li>\n<li>OpenAI \u2014 Terms: https:\/\/openai.com\/policies\/terms-of-use\/ \u00b7 Privacy: https:\/\/openai.com\/policies\/privacy-policy\/<\/li>\n<li>Anthropic \u2014 Terms: https:\/\/www.anthropic.com\/legal\/consumer-terms \u00b7 Privacy: https:\/\/www.anthropic.com\/legal\/privacy<\/li>\n<\/ul>\n\n<p>The built-in visitor analytics (Dashboard \u2192 Visitors) is first-party only: it records views on your own server and makes no external calls. It is off until you opt in, and never stores IP addresses (visitors are counted with a daily one-way hash).<\/p>\n\n<p><strong>Agency help links (WhatsApp \/ nexalseo.com)<\/strong> \u2014 inside a Semantic Analysis criterion's \"how to fix\" popup, an optional \"Chat on WhatsApp\" button and a \"Delegate to Our Agency\" button link out to WhatsApp (<code>https:\/\/wa.me\/<\/code>) and to the plugin author's site (<code>https:\/\/nexalseo.com\/contact<\/code>). These are ordinary outbound links: nothing is sent unless you click one, and only then does your browser open the destination. If you open the WhatsApp link, a short pre-filled message naming the SEO issue you clicked (and, on WhatsApp's side, your WhatsApp identity) is handed to WhatsApp so you can review and choose whether to send it; the plugin itself transmits no data. The plugin's Documentation, Support and Pro links (<code>https:\/\/nexalseo.com<\/code>) behave the same way. WhatsApp is a service provided by Meta \u2014 Terms: https:\/\/www.whatsapp.com\/legal\/terms-of-service \u00b7 Privacy: https:\/\/www.whatsapp.com\/legal\/privacy-policy. nexalseo.com \u2014 Terms: https:\/\/nexalseo.com\/terms-of-service\/ \u00b7 Privacy: https:\/\/nexalseo.com\/privacy-policy\/.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>NexalSeo<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu in WordPress.<\/li>\n<li>Follow the Setup Wizard, or edit any post\/page\/product\/term and fill in the \"Nexal SEO\" fields.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20send%20my%20content%20anywhere%3F\"><h3>Does this plugin send my content anywhere?<\/h3><\/dt>\n<dd><p>No, not by default. The semantic analysis engine (Topical Completeness, Cluster Health, Semantic Structure) runs entirely on your server. The only outbound requests are the opt-in AI integration described in \"External services\" above, and only when you explicitly trigger it with your own API key.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20uninstall%20the%20plugin%3F\"><h3>What happens to my data if I uninstall the plugin?<\/h3><\/dt>\n<dd><p>Deleting the plugin (not just deactivating it) removes all of its settings, cached data, custom database tables (redirections, 404 log) and post\/term meta.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.8<\/h4>\n\n<ul>\n<li>Fixed: on a static front page (a Page set as your homepage under Settings \u2192 Reading), the SEO title and meta description set on the page itself via the Snippet editor were ignored \u2014 the front end always used the global \"Homepage SEO title \/ meta description\" settings instead. The page's own values now take precedence, and the global Homepage settings act as a fallback (and still apply when the homepage shows your latest posts).<\/li>\n<\/ul>\n\n<h4>1.3.7<\/h4>\n\n<ul>\n<li>Hardened (WordPress.org plugin review): every <code>$_SERVER<\/code>, <code>$_POST<\/code> and <code>$_GET<\/code> input flagged by the review is now sanitised at the point of read \u2014 the visitor-analytics user-agent, IP (REMOTE_ADDR) and Origin\/Referer host, the llms.txt editor content, the Yoast\/Rank Math import source, and the redirections request URI and source prefill.<\/li>\n<li>Fixed: replaced the deprecated second argument of <code>term_description()<\/code> (the taxonomy parameter, deprecated since WordPress 4.9.2) in the CollectionPage schema output.<\/li>\n<li>Fixed: the visitor-analytics time-series query now binds the <code>DATE_FORMAT<\/code> mask through <code>$wpdb-&gt;prepare()<\/code> as a placeholder instead of interpolating it into the SQL string.<\/li>\n<li>Fixed: the redirections admin notice now validates a nonce before reading its status\/count query args, and its per-IP rate-limit transient uses the plugin's <code>nexal_seo_<\/code> prefix (was <code>nxs_<\/code>).<\/li>\n<li>Changed: bundled <code>.po<\/code>\/<code>.mo<\/code>\/<code>.json<\/code> translation files were removed \u2014 the plugin is fully internationalized and translations are now delivered automatically through translate.wordpress.org.<\/li>\n<li>Documented: the readme \"External services\" section now discloses the optional outbound WhatsApp \/ nexalseo.com \"get help\" links (what is sent, when, and their Terms\/Privacy links), in addition to the existing AI-provider disclosures.<\/li>\n<\/ul>\n\n<h4>1.3.6<\/h4>\n\n<ul>\n<li>Added: Visitors analytics \u2014 a first-party \"Visitors\" tab in the Nexal SEO dashboard with views, unique visitors and top referrer origins by day, week, month and year. Collected on your own server with no external service, off until you opt in, and no IP addresses are stored (visitors are counted with a daily one-way hash).<\/li>\n<li>Added: AI category descriptions \u2014 a \"Generate with AI\" button on category, tag and product-attribute screens drafts an SEO description from the term name and the products\/posts in it. Opt-in, bring-your-own-key, with a preview before anything is saved.<\/li>\n<li>Added: CollectionPage schema on category \/ tag \/ custom-taxonomy archives, connected to the WebSite and its breadcrumb.<\/li>\n<li>Added: SoftwareApplication schema fields (application category, operating system, price, rating) so software\/plugin pages can be marked up for the app rich result.<\/li>\n<li>Added: a new \"Content signals\" criterion \u2014 each focus keyword should have its own image with matching alt text (the featured image counts too).<\/li>\n<li>Improved: the \"outbound source\" criterion now correctly treats internal links as internal (www\/non-www, subdomains, percent-encoded hosts), and its \"?\" popup lists the exact external link(s) it detected.<\/li>\n<li>Improved: the WooCommerce store audit no longer flags a product as \"incomplete Product schema\" when its schema type was intentionally changed (e.g. to Software Application) or disabled.<\/li>\n<li>Hardened: inline admin CSS\/JS is now enqueued via the WordPress APIs; JSON-LD output escapes slashes so page data can never break out of the script tag; the opening-hours setting is fully sanitised on every path; the readme \"External services\" section documents each AI provider with Terms and Privacy links; and the visitor-tracking endpoint is rate-limited.<\/li>\n<\/ul>\n\n<h4>1.27.14<\/h4>\n\n<ul>\n<li>Fixed: keeping Yoast SEO \/ Rank Math \/ other SEO plugins active alongside Nexal SEO (e.g. right after using the importer) caused duplicate, competing title\/meta description\/Open Graph tags on live pages \u2014 confirmed by testing with the real Yoast SEO plugin active, both plugins' tags were present in the page source and either could win, meaning what was configured in Nexal SEO didn't always match what a browser or search engine actually saw. Nexal SEO now shows a site-wide admin notice with a one-click deactivate link when another SEO plugin is detected active, and the importer's messaging was corrected (it previously and incorrectly said it was fine to leave the source plugin active).<\/li>\n<\/ul>\n\n<h4>1.27.13<\/h4>\n\n<ul>\n<li>Fixed: Topical Completeness, Cluster Health and the internal-link suggestions assumed every content type uses the <code>category<\/code> taxonomy like Posts do. Pages (which have no taxonomy by default) always showed \"Suggestion: publish at least 3 articles in this category\" no matter how good the page actually was, and WooCommerce Products (which use <code>product_cat<\/code>, not <code>category<\/code>) got zero cluster data too. These checks now detect the right taxonomy per post type (falling back to any hierarchical taxonomy for custom post types), and show an honest \"this content type doesn't use categories\" message instead of a misleading one when there genuinely isn't one.<\/li>\n<\/ul>\n\n<h4>1.27.12<\/h4>\n\n<ul>\n<li>Fixed: the \"FAQ schema markup is added\" criterion only recognized Nexal SEO's own FAQ block. It now also detects any other FAQ block by name pattern (Yoast, Rank Math, etc.) and FAQPage JSON-LD\/microdata pasted directly into the content.<\/li>\n<\/ul>\n\n<h4>1.27.11<\/h4>\n\n<ul>\n<li>Added: 5 Nexal SEO Pro criteria (Semantic Anchor Router, Context Connector, Crawl Depth Minimizer, Entity Infeeder, Cluster Migrator) now preview as locked rows across Cluster Health, Questions to Answer and Semantic Structure, each explaining what the Pro engine does and linking to nexalseo.com\/pro.<\/li>\n<\/ul>\n\n<h4>1.27.10<\/h4>\n\n<ul>\n<li>Added: two new \"Content signals\" criteria (freshness \u2014 updated within the last year, and linking to a reputable outbound source), each with the same \"?\" explainer as the other checklist items.<\/li>\n<\/ul>\n\n<h4>1.27.9<\/h4>\n\n<ul>\n<li>Added: a new \"Questions to Answer\" criterion checks whether FAQ schema markup (via the Nexal SEO FAQ block) has been added to the content.<\/li>\n<\/ul>\n\n<h4>1.27.8<\/h4>\n\n<ul>\n<li>Added: each Semantic Analysis criterion (Content Structure, Cluster Health, Questions to Answer) now has a \"?\" button that opens a short explainer \u2014 why it matters and how to fix it \u2014 plus a link to get it fixed for you.<\/li>\n<\/ul>\n\n<h4>1.27.7<\/h4>\n\n<ul>\n<li>Fixed: the suggested AI model list for Gemini (<code>gemini-1.5-*<\/code>) and Anthropic (<code>claude-3-5-*<\/code>) pointed at model snapshots both providers have since fully retired, so the default \"Re-analyze with AI\" selection failed outright for anyone who hadn't manually picked a different model. Refreshed all five providers' suggested models against their current docs (Gemini 2.5 family, Anthropic Claude Haiku 4.5\/Sonnet 5\/Opus 4.8, Groq and OpenRouter's current model\/free-tier lineups). If you already have an old model ID saved in Settings \u2192 AI, clear the model field (or pick \"Custom\" with a current ID) to pick up the new default.<\/li>\n<li>Note on Groq specifically: Groq's Cloudflare-based anti-fraud protection blocks server\/datacenter\/hosting IP ranges by design (a known, widely-reported Groq limitation, not a bug in this plugin) \u2014 since a WordPress site's outbound request comes from its hosting server, not a residential IP, Groq can return \"Access denied. Please check your network settings.\" even with a valid key and model. If you hit this, either ask Groq support to allowlist your server's IP or use a different provider for server-side requests.<\/li>\n<\/ul>\n\n<h4>1.27.6<\/h4>\n\n<ul>\n<li>Fixed: saving the AI, Social, Local SEO or Breadcrumbs settings tab for the very first time on a site (i.e. before the <code>nexal_seo_settings<\/code> option exists yet) silently discarded the submitted values, leaving the fields blank after reload. Root cause: WordPress runs the settings sanitize callback twice when the option row doesn't exist yet \u2014 once inside <code>update_option()<\/code>, then again inside <code>add_option()<\/code>, fed the callback's own prior output \u2014 and the hidden field each tab used to know \"which tab was submitted\" wasn't preserved into that output, so the second pass silently skipped reprocessing the tab and fell back to blank defaults. The Titles &amp; Meta tab happened to avoid this by coincidence (its marker field is also a real stored setting); AI, Social, Local SEO and Breadcrumbs did not. Confirmed fixed via a real end-to-end HTTP save on a freshly-installed site.<\/li>\n<\/ul>\n\n<h4>1.27.5<\/h4>\n\n<ul>\n<li>Fixed: the \"Import from Yoast SEO \/ Rank Math\" batch importer redirected using <code>wp_nonce_url()<\/code>'s HTML-escaped output directly in an HTTP <code>Location<\/code> header, so every batch after the first silently failed (the literal <code>&amp;amp;<\/code> broke query-string parsing) \u2014 imports could stop after the very first batch of ~40 posts with no error shown. Confirmed fixed via a full end-to-end HTTP test through the real batch-redirect chain.<\/li>\n<li>Added: category, tag and WooCommerce product category\/tag SEO titles, descriptions and focus keywords are now included in the Yoast SEO \/ Rank Math import (previously the importer only handled posts, pages and products \u2014 taxonomy archive SEO data was silently skipped).<\/li>\n<\/ul>\n\n<h4>1.27.4<\/h4>\n\n<ul>\n<li>Fixed: visiting <code>\/sitemap.xml<\/code> or <code>\/llms.txt<\/code> while that feature was turned off served the homepage with a <code>200 OK<\/code> status instead of a proper <code>404<\/code> (WordPress's default query silently falls back to the front page when a rewrite-matched URL doesn't resolve to real content) \u2014 confirmed via automated testing that this also fully restores correct 404-monitor logging for both URLs.<\/li>\n<li>Fixed: llms.txt page\/post titles and excerpts could contain literal HTML entities (e.g. <code>&amp;#8217;s<\/code> instead of <code>'s<\/code>) since the output is served as plain text, not HTML.<\/li>\n<\/ul>\n\n<h4>1.27.3<\/h4>\n\n<ul>\n<li>llms.txt content is now viewable and directly editable in a text box on the AI tab, instead of being purely auto-generated. Save your own version, or reset back to the auto-generated one at any time.<\/li>\n<li>Added a \"Write with AI\" button (only shown when AI is enabled) that drafts an llms.txt using your site's Schema\/Knowledge-Graph identity plus your published pages AND recent posts \u2014 grouped by actual topic instead of a flat list \u2014 using your own configured AI provider. Manual trigger only; the draft is saved so you can review\/edit it before it goes live.<\/li>\n<\/ul>\n\n<h4>1.27.2<\/h4>\n\n<ul>\n<li>Fixed llms.txt (added in 1.27.1) not actually appearing at the site URL after clicking \"Create\": it was being written as a real file at <code>ABSPATH<\/code>, which isn't always the same folder a site's domain actually serves from. It's now served virtually through a rewrite rule instead \u2014 the same approach this plugin's own XML sitemap already uses \u2014 so it works regardless of hosting\/filesystem setup. The button now toggles llms.txt on\/off (content is generated fresh on every request, so there's no separate \"regenerate\").<\/li>\n<\/ul>\n\n<h4>1.27.1<\/h4>\n\n<ul>\n<li>AI tab: when AI is enabled, Nexal SEO shows an llms.txt status check with a one-click button to turn it on. See 1.27.2 below for a fix to how it's served.<\/li>\n<\/ul>\n\n<h4>1.27.0<\/h4>\n\n<ul>\n<li>Removed Webmaster Tools entirely: the Google Search Console \/ Bing Webmaster Tools live-data connection, the OAuth flow, and the legacy Google\/Bing\/Yandex\/Pinterest verification meta tags. This drops an entire settings tab and its stored credentials\/tokens \u2014 anyone using it should note this feature is gone.<\/li>\n<li>Added full French, German, Spanish and Russian translations (692 strings, PHP and block-editor JS).<\/li>\n<li>Extended the local semantic analysis engine's stop-word list and question-style heading detection to Russian (French\/German\/Spanish\/Arabic were already covered), and the optional AI n-gram\/question suggestions now explicitly ask for output in the site's configured language instead of only inferring it from the content excerpt.<\/li>\n<\/ul>\n\n<h4>1.26.4<\/h4>\n\n<ul>\n<li>Redesigned the plugin admin UI: replaced the purple\/pink\/teal gradient banners, glow effects and gradient buttons across every settings tab and module page with a plain white header, a single accent colour, and native wp-admin-style tabs\/cards.<\/li>\n<\/ul>\n\n<h4>1.26.3<\/h4>\n\n<ul>\n<li>Breadcrumbs \"Auto insert\" now skips WooCommerce shop\/product pages (which already print their own breadcrumb) and themes that declare the \"yoast-seo-breadcrumbs\" theme-support flag, so you don't get two breadcrumb trails stacked together. This is best-effort \u2014 it can't detect breadcrumbs hardcoded directly into a theme, so manual placement via [nexal_breadcrumbs] is still recommended for full control.<\/li>\n<\/ul>\n\n<h4>1.26.2<\/h4>\n\n<ul>\n<li>Added a \"Monitor H1\" setting (Titles &amp; Meta) \u2014 when turned off, the duplicate-H1 check is hidden from the Semantic Structure panel instead of always being shown.<\/li>\n<li>Webmaster Tools tab no longer fetches live data on plain page load \u2014 it now reads the local cache only and relies on the explicit \"Refresh data\" button, closing a case where an external request could fire without a direct user action.<\/li>\n<li>Added <code>uninstall.php<\/code> to fully remove options, transients, custom tables and post\/term meta when the plugin is deleted.<\/li>\n<li>Added a readme \"External services\" section disclosing the opt-in Google\/Bing\/AI integrations.<\/li>\n<\/ul>\n\n<h4>1.26.1<\/h4>\n\n<ul>\n<li>Removed the manual verification-code paste fields and self-check from Webmaster Tools (superseded by the OAuth\/API \"Connect\" flow); previously saved codes keep working on the front end.<\/li>\n<li>The Nexal SEO metabox\/editor sidebar\/score column now also support custom post types that are visible in wp-admin but not registered as fully \"public\".<\/li>\n<\/ul>\n\n<h4>1.26.0<\/h4>\n\n<ul>\n<li>Webmaster Tools: connect Google Search Console (OAuth) or Bing Webmaster Tools (API key) to pull clicks\/impressions\/position\/top queries into the dashboard. Manual refresh only, 12-hour local cache. Yandex\/Pinterest credential fields scaffolded for a future update.<\/li>\n<\/ul>\n\n<h4>1.20.0<\/h4>\n\n<ul>\n<li>Added the Local SEO module: LocalBusiness structured data, NAP consistency scanner, and a geo\/local-SEO checklist.<\/li>\n<\/ul>\n\n<h4>1.18.0<\/h4>\n\n<ul>\n<li>Schema output rebuilt as a connected entity <code>@graph<\/code> (Organization, WebSite, Article, Product, BreadcrumbList) instead of separate, disconnected JSON-LD blocks.<\/li>\n<\/ul>\n\n<h4>1.0.0 \u2013 1.17.x<\/h4>\n\n<ul>\n<li>Initial releases and early iterations: focus keyword\/SEO title\/meta description for posts, pages, products and terms; modular dashboard; tabbed settings; Open Graph\/Twitter Card output; local semantic content analysis engine; XML Sitemap, Redirections, 404 Monitor, Schema, Breadcrumbs and WooCommerce audit modules; optional AI assist with bring-your-own API key.<\/li>\n<\/ul>","raw_excerpt":"Lightweight SEO plugin: titles &amp; meta, XML sitemap, redirects, schema, local SEO and optional AI \u2014 all local by default, nothing phones home.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/339872","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=339872"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/canopuswebagency26"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=339872"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=339872"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=339872"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=339872"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=339872"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=339872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}