=== CitedSEO ===
Contributors: adworksbid
Tags: ai seo, local seo, rank tracker, schema, google search console, arabic seo, rtl, عربي
Requires at least: 6.0
Tested up to: 7.0
Stable tag: 1.3.63
Requires PHP: 7.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

SEO plugin for AI-era search with real Arabic dialect support: on-page analysis, schema, rank tracking, GSC & GA4, all free. PRO adds AI visibility.

== Description ==

The first WordPress SEO plugin built for AI-era search. While other plugins optimize only for Google's traditional results, CitedSEO also prepares your content for where search is going: ChatGPT, Perplexity, Gemini, and Google AI Overviews. Everything below is free — no locked features, no trial limits.

**On-Page SEO**
Analyze any post or page against its focus keyword. Scores title, meta description, content length, keyword usage, headings, images, and internal links. Scores appear as a colored circle directly in the Posts and Pages list tables (similar to Rank Math's column) so you can triage your entire site at a glance.

**XML Sitemaps**
Auto-generated sitemaps for posts, pages, taxonomies, images, and Google News. Served virtually — no static file needed. Submit to Google Search Console and Bing Webmaster Tools from the Sitemap admin page. Flush cache on demand.

**Google Search Console Integration**
Connect GSC via OAuth and pull clicks, impressions, CTR, and average position directly into your WordPress dashboard. Date-range selector (7/28/90/180 days and custom). Top pages and top queries tables with period-over-period change.

**Google Analytics 4 Integration**
Connect GA4 via the same OAuth flow. Traffic data feeds the CitedSEO dashboard alongside GSC data.

**Rank Tracker**
Track unlimited keywords and their Google Search Console positions. Historical position chart per keyword. Daily automatic position refresh via WP-Cron.

**Local SEO**
Add and manage business locations with full address, phone, email, geo-coordinates, business hours, and price range. Automatically generates LocalBusiness schema markup.

**Hreflang Manager**
Define language/region pairs and let CitedSEO inject the correct hreflang link elements in `<head>` across your site.

**Arabic SEO & RTL Support**
Built for Arabic and GCC markets, not just translated. The on-page analyzer is Arabic-aware — Unicode-safe word counting plus morphological keyword matching that recognizes inflected and root forms of an Arabic keyword, not just exact-phrase matches. Switch the entire admin interface to Arabic with a native right-to-left layout, in the same Cairo typeface used throughout the plugin (including PRO client reports). The built-in Dialect Keyword Adapter generates keyword variants across 9 Arabic dialects — Modern Standard Arabic, Saudi, Egyptian, Kuwaiti, Lebanese, Emirati, Iraqi, Jordanian, and Moroccan — so you can target how people in each market actually search.
The admin interface can also switch itself automatically: CitedSEO detects WPML, Polylang, or your site's default WordPress language, and flips to Arabic on its own the moment your site is Arabic — no settings hunt required. Turn this off in Settings if you'd rather set it manually.

**Redirects**
Create, edit, and delete 301/302 redirects from the admin. Tracks hit counts per redirect.

**Broken Link Checker**
Scans all internal and external links in your content. Displays HTTP status codes and last-checked timestamps. Manual scan on demand, with opt-in automatic daily background scan via WP-Cron.

**Bulk Editor**
Edit title tags and meta descriptions for hundreds of posts in a spreadsheet-style table. Export to CSV.

**Content Decay**
Flag posts whose organic traffic has been declining. Prioritize which content to refresh first.

**Keyword Cannibalization Scanner**
Detect when multiple pages are competing for the same focus keyword and risking self-competition in Google.

**Schema Markup**
Add Article, FAQ, Product, Recipe, Event, Local Business, Breadcrumb, and more — with a clean admin UI. Output as JSON-LD in `<head>`.

**Instant Indexing**
Submit URLs directly to Google's Indexing API and Bing Webmaster Tools for faster crawling after publish or update.

**WooCommerce SEO**
Optimized title and meta templates for product pages. Bulk-fix missing product image alt text.

**Dashboard**
KPI strip showing clicks, impressions, CTR, and average position from GSC and Bing. Traffic chart with range selector. SEO snapshot widget on the native WordPress Dashboard screen.

**AI Agents (MCP)**
Connect Claude, or any other MCP-compatible AI assistant, directly to this site over the Model Context Protocol. Read SEO health, broken links, content decay, Search Console data, AI Search Visibility, and Rank Tracker keywords, and optionally allow write access for updating meta titles/descriptions, redirects, and Rank Tracker keywords. No extra plugin required.

**Built for AI-Era Search**
AI engines like ChatGPT, Perplexity, Gemini, and Google AI Overviews now surface content before users ever click a search result. CitedSEO builds the foundations these engines rely on: structured schema markup, well-defined entities, clean on-page signals, and fast-loading pages. Every feature in this plugin contributes to how confidently an AI engine can read, understand, and cite your content.

For full AI Search Optimization including GEO (Generative Engine Optimization), AEO (Answer Engine Optimization), AI prompt tracking across ChatGPT, Gemini, Perplexity, Copilot, and Claude, and llms.txt generation, upgrade to CitedSEO PRO.

**Extend with CitedSEO PRO**
CitedSEO PRO is a separate, optional add-on available at [adworks.bid/awbseo-pro](https://adworks.bid/awbseo-pro/). Pro features include:

* **GEO / AI SEO** — Optimize content for Generative Engine Optimization and Answer Engine Optimization. Auto-generates llms.txt and structured AI-friendly content signals.
* **AI Search Optimizer** — Track how your brand appears in ChatGPT, Gemini, Perplexity, Copilot, and Claude across your target prompts.
* **Brand Visibility on AI Engines** — Monitor and grow brand citations in AI-generated answers.
* **AI Content Writer** — Generate SEO-optimized drafts using your own AI API key (OpenAI, Anthropic, Google, Perplexity).
* **AI Link Architecture** — Smart internal linking powered by semantic analysis.
* **Local Rank Grid** — Visualize keyword rankings across a geographic grid map.
* **Core Web Vitals Monitor** — Track LCP, INP, and CLS via PageSpeed Insights API.
* **Revenue Intelligence** — Connect revenue data to SEO performance.
* **White-label Client Reports** — Branded PDF reports with your logo and client data.
* **Activity Log & ClickUp Sync** — Automatically logs every completed SEO task and syncs it to ClickUp, so agencies can track work and build client reports without duplicate data entry.

The free plugin works fully without Pro.

== Installation ==

1. Upload the `adworksbid-seo` folder to `/wp-content/plugins/`.
2. Activate the plugin through the **Plugins** screen in WordPress.
3. Go to **CitedSEO → Dashboard** to start setup.
4. Connect Google Search Console via **Settings → GSC** to unlock traffic data.

== Frequently Asked Questions ==

= Is everything really free? =

Yes. All features listed in the description are fully functional with no usage limits. CitedSEO PRO is a separate add-on, not a trial or upgrade gate on the free features.

= Does this plugin track my users? =

No. CitedSEO does not collect or transmit user data. The Google Search Console and GA4 integrations use OAuth tokens stored only in your own WordPress database and communicate directly between your site and Google's servers.

= Is it compatible with Gutenberg? =

Yes. The meta box and all admin pages work in both the classic editor and the block editor.

= Can I use this with WooCommerce? =

Yes. The WooCommerce SEO module generates optimized title and meta templates for product archive pages and individual product pages.

= Does it conflict with Yoast, Rank Math, or SEOPress? =

Running two SEO plugins simultaneously can cause duplicate meta tags. We recommend deactivating other SEO plugins when using CitedSEO.

= How is CitedSEO different from Yoast SEO or Rank Math? =

CitedSEO includes everything those plugins offer — on-page analysis, schema, sitemaps, redirects — plus features they don't have: a built-in rank tracker, content decay detection, keyword cannibalization scanner, AI search visibility foundations, and local SEO, all free with no feature gates. CitedSEO PRO adds AI prompt tracking across ChatGPT, Gemini, Perplexity, Copilot, and Claude, plus GEO and AEO content optimization and white-label client reports.

= Does CitedSEO help with AI search visibility (ChatGPT, Perplexity, Gemini)? =

Yes. CitedSEO builds the technical foundations AI engines rely on to read, understand, and cite your content: structured schema markup, clean on-page signals, entity optimization, and fast-loading pages. CitedSEO PRO adds full AI prompt tracking across ChatGPT, Gemini, Perplexity, Copilot, and Claude, plus GEO (Generative Engine Optimization) and AEO (Answer Engine Optimization) content transformation.

= What is GEO and AEO? =

GEO (Generative Engine Optimization) and AEO (Answer Engine Optimization) are the practices of structuring and writing content so AI engines can extract, cite, and recommend it in their answers. This goes beyond traditional SEO — it means direct-answer paragraphs, clear entity definitions, scannable Q&A structure, and content that AI engines can quote accurately. CitedSEO PRO handles this for WordPress sites.

== Screenshots ==

1. Dashboard — GSC and Bing traffic KPIs with date range selector
2. Posts list — SEO score column with keyword and T/D/K status pills
3. Bulk Editor — spreadsheet-style title and meta editing
4. Sitemap admin — live URL counts and reachability status
5. Rank Tracker — keyword positions with history chart
6. Local SEO — business location manager

== External Services ==

CitedSEO connects to the following third-party services, only when you enable the related feature. No data is sent without you taking that action.

**Google Search Console** — Pulls clicks, impressions, CTR, and position data into your dashboard via `searchconsole.googleapis.com`. Activated when you connect GSC via OAuth in Settings. [Privacy Policy](https://policies.google.com/privacy) · [Terms](https://policies.google.com/terms)

**Google Analytics 4** — Displays GA4 traffic data in your dashboard via `analyticsdata.googleapis.com`. Activated when you connect GA4 via OAuth in Settings. [Privacy Policy](https://policies.google.com/privacy) · [Terms](https://policies.google.com/terms)

**Bing Webmaster Tools** — Pulls Bing search performance data and submits sitemaps via `ssl.bing.com/webmaster`. Activated when you connect Bing in Settings. [Privacy Statement](https://privacy.microsoft.com/en-us/privacystatement) · [Services Agreement](https://www.microsoft.com/en-us/servicesagreement)

**IndexNow** — Notifies Bing, Yandex, and Cloudflare via `api.indexnow.org` when a URL is published or updated. Activated only if Instant Indexing auto-submit is turned on in Settings. [Privacy Policy](https://www.indexnow.org/privacy) · [Terms](https://www.indexnow.org/terms)

**AdWorks.Bid OAuth Broker** — Exchanges Google OAuth authorization codes for access tokens via `oauth.adworksbid.com` so your client secret never touches the browser. Activated when you connect GSC or GA4; only your site URL, a temporary code, and a nonce are sent — no post content or user data. [Privacy Policy](https://adworks.bid/privacy-policy) · [Terms](https://adworks.bid/terms-of-service)

**Google Fonts (Cairo)** — Loads a typeface for the admin interface via `fonts.googleapis.com` on every CitedSEO admin page. [Privacy Policy](https://policies.google.com/privacy) · [Fonts FAQ](https://developers.google.com/fonts/faq/privacy)

== Changelog ==

= 1.3.63 =
* New: CitedSEO can now connect directly to Claude, or any other MCP (Model Context Protocol) compatible AI assistant, under the new AI Agents (MCP) page in the sidebar. Once connected, your AI assistant can read your SEO health snapshot, broken links, content decay, keyword cannibalization, Search Console data, AI Search Visibility, and Rank Tracker keywords, and, only once you turn write access on, update a page's title, description, or focus keyword, add or remove a Rank Tracker keyword, create a redirect, or submit a URL for instant indexing. Write access is off by default. No extra plugin is required to connect; sites running WordPress 6.9 or later also expose these same abilities through WordPress's own Abilities API for compatibility with the wider MCP ecosystem.

= 1.3.62 =
* New: the Dashboard's SEO Score now includes a "What to fix first" analysis underneath the checklist, a short, prioritized, plain-language read of what's actually wrong and why it matters, instead of just counts and "Fix" links. Broken links are always flagged first since they hurt both visitors and crawl budget, followed by a note when your score is based on a small slice of your site's pages, then missing titles, descriptions, and target keywords, each with a one-line explanation of what it costs you and a direct link to fix it.
* New: the Analytics page now has an "AI Search Visibility" section powered by your connected Google Analytics, showing how many visits your site gets from ChatGPT, Perplexity, Gemini, Copilot, Claude, and other AI engines, what share of your total traffic that is, how many distinct AI engines are sending visitors, and a per-engine breakdown table. Sites without Google Analytics connected see a one-click prompt to connect it in Settings.
* Fix: on at least one site, the Dashboard's card borders, score ring, checklist rows, and tables were rendering as plain unstyled stacked text because the plugin's own stylesheet wasn't applying, even though every number and link on the page was still correct. The Dashboard's key layout is now also written inline as a fallback alongside the stylesheet, so it keeps its intended look even on a site where that stylesheet fails to load for any reason.

= 1.3.61 =
* New: the admin sidebar is now goal-based instead of a flat, nested tool list. It reads Dashboard, Analytics, then the six goals (Track Your Growth, Get Found on Google, Optimize Your Pages, Build Local Authority, Enhance AI Search, Fix & Maintain), followed by Feature Manager, Task Manager, Client Reports, Agency Fleet, Settings, and Get Pro on the free plugin. Click a goal (or Agency Fleet) and only the tools for it show up, as a card grid, instead of hunting through menus. Tools that used to sit in the sidebar as their own entries (Bulk Editor, Export/Import, White Label, and on PRO: GEO/AI SEO, Brand Visibility, AI Search Optimizer, Core Web Vitals, Local Rank Grid, AI Content Writer, The Kitchen Lab, Revenue Intelligence, AI Link Architecture) are now reachable only as cards on their goal's (or Agency Fleet's) page, removing the duplicate nested entries PRO used to add next to each goal. Hover a goal in the sidebar and its tools appear in a small flyout, so they're still one hover away without cluttering the sidebar itself.
* New: a "SEO Score" on the Dashboard that genuinely analyzes the whole site, averaging the real on-page analysis score (the same score shown on the Posts and Pages list tables) across every published post and page, with a note on how many pages still need analyzing and a link to run it in bulk. Replaces the previous score, which only counted missing titles/descriptions/keywords rather than running a real analysis.
* New: every tool card and category icon across the admin (both free and PRO, since PRO's tools render through the same shared card grid) now uses a clean inline SVG icon instead of an emoji glyph, each tinted to its goal's own color.
* New: a short, dismissible first-run tour introduces new users to the goal-based navigation and highlights what CitedSEO does that Yoast and Rank Math don't - AI-search readiness and native Arabic/RTL support - the first time they open a CitedSEO admin screen. Skipping or finishing it dismisses it for the rest of that day, then it shows again on the next admin visit, so it keeps getting seen on a freshly-installed site instead of disappearing for good after one click.
* Improvement: Fading Content and Competing Pages moved from Track Your Growth to Optimize Your Pages, and PRO's AI Link Architecture moved from Track Your Growth to Fix & Maintain, to better match what each goal is actually for.
* Improvement: PRO's "Tasks Completed" page is renamed "Task Manager" to match its place as a standalone item in the new sidebar, alongside Feature Manager and Client Reports.
* Improvement: the Go Pro page's feature grid and CTA now use the same card system and the plugin's own navy/teal palette instead of a separate hardcoded style and a dark gradient banner.
* New: a new "Agency Fleet" section in the sidebar (same card-grid pattern as the 6 goals) now holds White Label, which is no longer its own standalone sidebar row. On PRO, Agency Fleet also gains a Roles Manager card so an agency can choose exactly which of the 6 goal sections each team member can see and open, per user - restricted sections disappear from that user's sidebar and flyout and can't be opened by URL either. Administrators always keep full access. On PRO, Agency Fleet and WooCommerce SEO can each be turned off in Feature Manager for sites that don't need them - both stay on by default.
* Fix: on a site with a lot of other plugins' top-level admin menu items, the first-run tour's highlight and card could point at a sidebar target sitting below the fold, so clicking Next appeared to make the tour vanish rather than move to the next step. The tour now scrolls its target into view first, so the highlight and card always land somewhere visible.

= 1.3.60 =
* New: Rank Tracker now does a real live position check instead of only relying on Search Console. When GSC is disconnected, or simply has no data yet for a keyword (the normal case for a brand-new page or a lower-volume market), it falls back to a live Google SERP check via an optional self-service SerpApi.com key under Settings > Rank Tracker. Each tracked keyword can also be pinned to one of the plugin's 9 Arabic dialect regions, so "how do I rank for this in Kuwait" and "how do I rank for it in Saudi" are tracked as separate rows for the same term, with both the GSC country filter and the live SERP check scoped to that market.
* Fix: content-length and heading-question checks used an ASCII-only word counter and Latin-only "?" detection, which could undercount legitimately long Arabic articles and miss Arabic-language question headings (؟) entirely on PRO's AI Answer Simulator and Question Gap Detector modules. Both now use Unicode-aware counting and recognize the Arabic question mark, and the Question Gap Detector now generates Arabic (MSA) question suggestions instead of English ones when the post's own content is Arabic.

= 1.3.59 =
* New: when Polylang or WPML is active and the post being edited is set to Arabic, the CitedSEO meta box now shows its own labels, tab names, hints, buttons, and placeholders in Arabic (SEO Title, Meta Description, SERP Preview, Social/Advanced/Schema/Analysis tabs, the Content origin flag, the Arabizi field, and the dialect adapter) - independent of the plugin's own admin-interface language setting, so an English-language admin editing an Arabic post (the common agency setup) still gets Arabic chrome. This never touches the post's own title/description content, which is always exactly what was typed or auto-generated. The dynamic on-page-analysis check messages in the Analysis tab and the robots meta values (index/noindex/follow/nofollow) are left in English on purpose - the former is a separate, larger PHP-side job, the latter are technical directive values recognized as-is.

= 1.3.58 =
* Fix: SERP Preview and the Canonical URL field in the meta box showed a percent-encoded gibberish string (e.g. %d8%a7%d9%84...) for Arabic post slugs instead of readable Arabic. This is a separate code path from the earlier on-page-analysis slug-suggestion fix (1.3.x) - that one covered the suggested slug, this covers the live post's actual permalink as shown in the meta box - and is now decoded the same way.
* Fix: Arabic text typed into the meta box (SEO title, meta description, SERP preview) now renders in the same Cairo typeface used everywhere else in CitedSEO and in the PRO white-label client reports. The earlier Cairo fix only applied when the admin interface language itself was set to Arabic; it now also applies on the post editor screen even when the interface language is English, which is the common case when editing Arabic client content from an English-language admin.

= 1.3.57 =
* New: Author / E-E-A-T profile fields on each user's WordPress profile (credentials or job title, an Arabic display name, areas of expertise, and professional profile links) - Article and Blog Post schema now emits a real Person block built from these instead of just a bare name, with the Arabic name shown as primary on Arabic posts and as an alternate on non-Arabic ones. Also fixes the publisher logo in that same schema, which previously always emitted an empty URL.
* New: optional "content origin" flag in the meta box - mark a post as natively written, translated, or mixed, with an inline reminder to give translated content a native-language editing pass.

= 1.3.56 =
* New: optional Arabizi/code-switch keyword field next to the focus keyword in the meta box - captures a Latin-letter transliterated or mixed-language variant, which is then treated as an alternative match everywhere the focus keyword is checked (title, description, URL slug, density, intro paragraph, subheadings) and included alongside the main keyword in this page's schema markup.
* New: Query language breakdown on the Analytics page splits Search Console queries into Arabic vs everything else, each with its own clicks/impressions/CTR/position totals and top-query list, instead of one blended ranking that buries whichever language has less volume.
* New: schema markup for Articles, Blog Posts, Pages, Products, How-Tos, and Recipes now carries `inLanguage` (the page's actual detected language, not just the site default) and a stable per-page `@id`, so multilingual and Arabic-on-English-site content is identified correctly to Google and AI answer engines.
* New: dialect-aware local SEO content - generate a Google Business Profile description or a review reply in any of the nine supported Arabic dialects, in Local SEO settings.

= 1.3.55 =
* New: hreflang settings now include a one-click Arabic dialect region picker (the same nine dialects as the meta box, mapped to real codes like ar-SA, ar-AE, ar-EG) so you insert valid hreflang codes instead of typing them by hand.
* New: "Validate Hreflang Pairs" button checks your saved hreflang pairs against the live pages - confirms each URL returns 200 and that pairs actually link back to each other (Google ignores hreflang that isn't reciprocal), and flags pages missing a self-referencing tag.

= 1.3.54 =
* Fix: the URL-slug suggestion in on-page analysis showed a percent-encoded gibberish string (e.g. %d8%b9%d9%84...) for Arabic focus keywords instead of readable Arabic. It now decodes back to the actual Arabic slug. The underlying pass/fail check for whether the keyword is already in the slug was already correct and is unchanged.

= 1.3.53 =
* New: on-page analysis now recognizes Arabic letter-form variants (alef, taa marbuta, alef maqsura) and diacritics as equivalent, and uses a light Arabic stemmer for keyword density and match checks instead of blunt substring matching. A focus keyword written one valid way now correctly matches content spelled another valid way.

= 1.3.52 =
* Change: updated the plugin's WordPress.org listing description to highlight genuine Arabic dialect SEO support (no code changes).

= 1.3.51 =
* Fix: Arabic admin interface, meta box, and the built-in RTL layout now all load and use the same Cairo typeface as the PRO white-label client reports -- a leftover Noto Kufi Arabic override in white-label mode was replacing Cairo with a different font whenever the admin language was set to Arabic.
* Change: default dialect selection in the meta box is now MSA - Modern Standard Arabic (was defaulting to Saudi/Najdi), matching the first option in the dropdown.
* New: "Suggest for me" now writes the meta description directly in whichever dialect is currently selected, instead of always suggesting a generic/MSA draft that then needed a separate dialect-adapt pass.

= 1.3.50 =
* Fix: Arabic Dialect Keyword Adapter now genuinely writes in the selected dialect (e.g. Emirati/Khaliji) instead of lightly rewording Modern Standard Arabic -- the prompt now gives the AI concrete colloquial vocabulary and phrasing per dialect instead of just a dialect name.
* New: added a "Adapt full description for dialect" control below the SEO fields box -- rewrites the whole meta description (not just the focus keyword) into the selected dialect with one click.
* Fix: a PHP syntax error in the new description-rewrite endpoint (introduced with the feature above, never shipped) has been corrected.

= 1.3.49 =
* Security: GA4 and Bing property pickers introduced in 1.3.48 are now also filtered to properties/sites matching this WordPress install's own domain, not just gated by who connected them -- closes a gap where the connecting admin (which can be a client's own login on a shared site) could still browse and select any other client's property tied to the same Google/Bing account. Sites with no confident domain match still show the full list with a clear warning rather than being blocked.
* Fix: GA4 and Bing no longer silently auto-assign "the first property/site" as the active one when a new connection can't confidently match this site's domain -- previously this could (and on at least one live site, did) leave a site reporting on a completely different client's analytics data with no visible warning.

= 1.3.48 =
* Security: GA4 and Bing Webmaster Tools property/site pickers are now scoped to the admin who originally connected them. Previously, on a site where more than one admin has access (e.g. an agency and their client), any admin could see the full list of every other property or site tied to that connected account -- not just the one active on this site. Sites already connected before this fix will show a one-time "Claim this connection" prompt.

= 1.3.47 =
* New: CitedSEO now auto-detects WPML, Polylang, or your site's default language and automatically switches the admin interface to Arabic when your site is Arabic. Toggle available in Settings under Interface Language.

= 1.3.46 =
* Maintenance: version sync and internal cleanup.

= 1.3.12 =
* Fix: On-page analyzer word count now accurate for WPBakery, Elementor, and all page builders — falls back to HTTP fetch of the public page URL when admin-context rendering cannot extract meaningful text.

= 1.3.11 =
* Fix: On-page analyzer shortcode extraction now uses O(n) PCRE-safe regex — eliminates silent failures on large page builder pages that hit PHP's pcre.backtrack_limit.

= 1.3.10 =
* Fix: On-page analyzer page builder fallback now triggers correctly for all WPBakery and Elementor pages regardless of content structure.

= 1.3.9 =
* Fix: On-page analyzer now extracts text from shortcode attributes (text, title, heading) in addition to inner content — button labels and heading text now included in word count.

= 1.3.8 =
* Fix: On-page analyzer word count fallback for page builders now uses a dedicated raw-content extraction path that preserves structural checks (images, links, headings).

= 1.3.7 =
* Fix: On-page analyzer correctly detects page builder content and applies text extraction fallback when the_content filter returns unrendered shortcodes in admin AJAX context.

= 1.3.6 =
* Fix: Shorten plugin description to 3 lines in the WordPress admin plugins list.

= 1.3.5 =
* Fix: Add load_plugin_textdomain() so bundled translations load correctly.
* Fix: Remove dead database query in sitemap page count (post_type = 'post_type' typo).
* Fix: Remove Google Fonts hotlink from admin CSS — no external font requests on admin pages (GDPR).
* Fix: Replace number_format() with number_format_i18n() across all display contexts for proper locale support.
* Fix: Replace date('Y') with date_i18n('Y') in content decay suggestions.
* Fix: Extend disable_competitors() to also suppress Rank Math, All in One SEO, and SEOPress head output.

= 1.3.4 =
* Fix: Replace all remaining AWBSEO references in readme description, FAQ, and installation with CitedSEO branding.

= 1.3.3 =
* Add citedseo search tags to improve discoverability on WordPress.org.

= 1.3.2 =
* Fix: Dashboard widget title and footer link now display CitedSEO branding.

= 1.3.1 =
* Rebranded plugin display name from AdWorksBid SEO to CitedSEO. Internal prefixes unchanged.

= 1.3.0 =
* New: React-powered meta box with live on-page analysis.

= 1.2.11 =
* New: Export / Import — back up all SEO data (settings, redirects, rank tracker, local SEO, per-page meta) to a JSON file and restore it on any site. Available under AWBSEO > Export / Import.

= 1.2.10 =
* Improvement: CitedSEO dashboard widget now always appears at the top of the WordPress admin dashboard, above all other widgets.

= 1.2.9 =
* Fix: Setup wizard no longer freezes at "Scanning for existing SEO data..." — a PHP nowdoc was incorrectly used to build the wizard's inline JavaScript, causing a `<?php echo ... ?>` tag to appear as literal text instead of being evaluated, which produced a JS syntax error that prevented the entire wizard script from running.

= 1.2.8 =
* Fix: AJAX action names now use the consistent `awbseo_*` prefix throughout the admin — eliminates silent failures when multiple AJAX handlers were registered under mismatched action strings.
* Fix: Inline admin JavaScript blocks now attach to the correct enqueued script handle (`awbseo-admin`) so all admin UI interactions load reliably.
* Compatibility: Improved compatibility with CitedSEO PRO — shared action hooks and nonce names are now consistent across both plugins.

= 1.2.7 =
* Fix: Instant Indexing — when "Submissions Logged" is 0, a contextual info box now explains that submissions only trigger on publish/update and directs users to Bulk Submission for existing content.
* Fix: Revenue Intelligence — when Google Search Console is not connected, a prominent full-width callout now dominates the screen instead of a small inline banner, making the setup requirement impossible to miss.
* Fix: Client Reports — default report title now includes the current time (e.g. "SEO Report - Jul 12, 2026 (3:45 PM)") so clicking Generate multiple times no longer creates identically-named duplicate entries.
* Fix: Core Web Vitals Monitor — when no PageSpeed Insights API key is set, a large prominent callout (with setup instructions and a direct link to the settings form) now appears at the top of the screen before the URLs table.
* Fix: AI Link Architecture — when 0 of N pages have been scanned (indexed === 0), the overview tab now shows a "Run your first scan" prompt instead of misleading zero-counts for Orphan Pages, Broken Links, and Health Score.
* Fix: WooCommerce SEO menu item is now automatically hidden when WooCommerce is not installed or active.
* Fix: Freemius "Yee-haw!" activation banner now auto-dismisses after 5 seconds on first display, so it confirms license activation once without persisting across every admin page.
* Fix: Arabic URL paths in the Rank Tracker Quick Wins table now display as readable text (was showing percent-encoded strings).
* Fix: Schema Types page no longer references "RankMath" by name — replaced with "Other SEO plugins".

= 1.2.6 =
* Improvement: Full visual redesign of all plugin sections — lighter page background (#f1f5f9), white cards with soft shadows, deeper navy palette, updated teal accent (#00c9a7), cleaner borderless tables with colored position pills, pill-shaped range selector, modern KPI cards with larger values and colored change badges, updated severity/badge colors throughout.
* Improvement: "Suggest For Me" button redesigned — gradient teal pill with shimmer animation, hover lift effect, and drop shadow. Distinct and premium-looking, matching the new design language.

= 1.2.5 =
* Feature: "Suggest For Me" now routes through AdWorks.Bid's own AI broker (Claude Haiku). No API key required from users — the feature works out of the box.

= 1.2.4 =
* Improvement: "Suggest For Me" button now works without an OpenAI API key — falls back to extracting the first 155 characters from the post content. Add an OpenAI key in Settings for AI-written suggestions.

= 1.2.3 =
* Fix: "Suggest For Me" now surfaces the actual OpenAI error message (quota exceeded, invalid key, rate limit, etc.) instead of the generic "empty response" fallback.

= 1.2.2 =
* Fix: "Suggest For Me" AJAX handler was calling AWBSEO_Core::get_settings() which does not exist, causing a 500 error. Now uses get_option('awb_seo_settings') directly.

= 1.2.1 =
* Fix: "Suggest For Me" AI button now works in the Bulk Editor — admin scripts were not loading on plugin submenu pages due to an incorrect hook check.
* Feature: "Suggest For Me" AI button added to the individual post/page meta box meta description field.
* Fix: Meta description counter and maxlength in the meta box updated to 155 characters (was 160/200).

= 1.2.0 =
* Fix: Bulk Editor meta description field now enforces a hard 155-character limit (maxlength) and marks the counter red above 155.

= 1.1.9 =
* Feature: Bulk Editor now has a "Suggest For Me" button on each meta description field — calls OpenAI gpt-4o-mini to generate an SEO-optimized description from the post title, focus keyword, and content. Requires an OpenAI API key in Settings.

= 1.1.8 =
* Improvement: Bulk editor meta description placeholder now shows a suggestion derived from the post excerpt or content instead of generic text.

= 1.1.7 =
* Fix: Added wp_unslash() around $_SERVER['REQUEST_URI'] in class-instant-indexing.php and class-redirects.php per WPCS standards.
* Fix: Added wp_unslash() around $_SERVER['PHP_SELF'] in class-setup-wizard.php.
* Fix: Added absint() and (int) casts to all unescaped integer echoes in bulk-editor.php.

= 1.1.6 =
* Fix: Restored privacy policy and terms of service links in readme.txt External Services section — pages are now live at adworks.bid/privacy-policy and adworks.bid/terms-of-service.

= 1.1.5 =
* Fix: Text domain changed from 'awb-seo' to 'adworksbid-seo' across all PHP files to match the WordPress.org plugin slug. Language files renamed accordingly.
* Fix: Chart.js updated from 4.4.0 to 4.5.1 (latest stable).
* Fix: Removed 404 privacy/terms URLs from External Services section in readme.txt.

= 1.1.4 =
* Fix: Rank Tracker page now displays in Arabic when site language is set to Arabic. All strings in rank-tracker.php are now wrapped with __()/_e() so the .mo translations take effect.
* Updated: awb-seo-ar.po/.mo expanded from 256 to 280 strings — all rank tracker strings added with Arabic translations.

= 1.1.3 =
* Fix: Health check rows (.awb-hc-*) now render as a proper grid with icon, label, progress bar, count, and fix link — previously had no CSS so all elements ran together without layout.
* Fix: Cairo font now applied to all text inside the plugin via .awb-seo-wrap * — fixes inconsistent font across labels, table cells, and stat values.
* Fix: On Arabic/RTL sites, Cairo applied to entire #wpbody including the admin sidebar via admin-rtl.css, so all AWBSEO menu items also render in Cairo.
* Improvement: More generous padding on cards (26px 30px), KPI cards (22px 24px), and page body to give the dashboard more breathing room.
* Improvement: Health score ring sized to 72px; section header layout uses flex to keep score ring aligned with title.
* Improvement: RTL overrides for KPI strip, date picker, chart legend, analytics tables, and health-check row column order added to admin-rtl.css.

= 1.1.2 =
* New: Cairo font (Google Fonts) loaded across all AWBSEO admin pages. Cairo supports Arabic and Latin, giving the plugin a consistent typeface in both languages. RTL sites get Cairo applied explicitly via admin-rtl.css.

= 1.1.1 =
* Fix: Dashboard content area (KPI cards, table headers, chart labels, health checks) now displays in Arabic when site language is set to Arabic. All strings in dashboard.php are now wrapped with __()/_e() so the .mo translations take effect. (1.1.0 only translated menu items, which were already wrapped — the content area was still hardcoded English.)
* Updated: awb-seo-ar.po/.mo expanded from 202 to 256 strings — all dashboard strings added with Arabic translations.

= 1.1.0 =
* New: Full Arabic UI — 202 strings translated to Arabic (languages/awb-seo-ar.po + awb-seo-ar.mo). Set WordPress site language to Arabic and the entire admin interface switches to Arabic automatically.
* New: RTL admin stylesheet (admin-rtl.css) — WordPress loads it automatically on Arabic/Hebrew/RTL sites. Covers all admin pages, meta box, score column, tables, forms, and the setup wizard.
* New: Arabic-aware on-page analyzer — detects Arabic content and switches to Unicode-safe word counting (fixing str_word_count() which returns 0 for Arabic). Keyword density uses morphological root matching for single-word Arabic keywords, and sliding-window phrase matching for multi-word Arabic keywords.
* Fix: 3 hardcoded strings in meta-box.php now wrapped with esc_html__() for translatability.

= 1.0.7 =
* Fixed: Pro plugin admin menu not appearing when both plugins are active. Root cause: WordPress loads plugins alphabetically, so adworksbidseo-pro loads before awb-seo and defines awb_fs() first; the free plugin's Freemius guard then returned early, skipping all class and admin menu registration. The guard now only prevents true double-loads — the free plugin always initializes fully regardless of load order.

= 1.0.6 =
* Fixed: Pro plugin dependency check — "CitedSEO PRO requires the free plugin" error no longer appears when Pro loads before the free plugin. AWB_SEO_VERSION is now defined before the Freemius guard so Pro can always detect the free plugin regardless of load order.

= 1.0.5 =
* SEO score column: fixed colored circle not rendering on Posts/Pages list tables — CSS was only loaded on plugin admin pages, now also loads on edit.php.

= 1.0.4 =
* Bulk Editor: fixed fatal error when switching post type to Pages — the Bulk Editor now correctly loads and displays all published post types including Pages.

= 1.0.3 =
* Schema output: removed `JSON_UNESCAPED_UNICODE` flag from `wp_json_encode()` calls — non-ASCII characters are now safely encoded as `\uXXXX` sequences.
* Schema meta-manager: replaced `stripslashes()` with `wp_unslash()` per WordPress coding standards.
* Updated all plugin-internal URLs from `adworksbid.com` to `adworks.bid` (upgrade prompts, admin Go Pro page, OAuth broker, readme external service declaration).

= 1.0.2 =
* Removed WooCommerce SEO locked overlay — all features are now fully free with no upgrade gate.
* Broken Link Scanner: removed false "daily auto-scan" claim; added opt-in toggle (off by default) to comply with WP.org Guideline 7.
* Instant Indexing: changed auto-submit default from ON to OFF — user must explicitly enable in Settings.
* Removed `JSON_UNESCAPED_SLASHES` from schema JSON-LD output to prevent XSS via forward-slash sequences.
* Fixed plugin header URLs (Plugin URI, Author URI) from 404 domain to https://adworks.bid/.
* Fixed `uninstall.php` — removed non-existent `awb_seo_instant_indexing_settings` option key; added `awbseo_bls_auto`.
* Updated all readme.txt adworksbid.com links to adworks.bid.

= 1.0.1 =
* Renamed plugin to "CitedSEO" for WordPress.org directory compliance.
* Tested up to WordPress 7.0.
* Moved all inline `<script>` and `<style>` blocks to `wp_enqueue_script()` / `wp_enqueue_style()` / `wp_add_inline_script()` / `wp_add_inline_style()`.
* Added `wp_unslash()` and proper sanitization to all `$_POST` reads.
* Bundled Chart.js 4.4.0 locally — removed external CDN dependency.
* Made Broken Link Scanner background cron opt-in (off by default).
* Fixed Instant Indexing auto-submit checkbox save logic.
* Added `== External Services ==` section to readme.txt.

= 1.0.0 =
* Initial release as a standalone free plugin.
* Includes: on-page analysis, schema, XML sitemaps, redirects, bulk editor, rank tracker (unlimited keywords), local SEO, hreflang manager, GSC integration, GA4 integration, Bing integration, broken link checker, content decay detection, keyword cannibalization scanner, WooCommerce SEO, instant indexing, SEO score post column, and dashboard widget.

== Upgrade Notice ==

= 1.0.1 =
WordPress.org compliance update — recommended for all users.

= 1.0.0 =
Initial release.

== دعم اللغة العربية (Arabic Language Support) ==

سيتد إس إي أو (CitedSEO) هو إضافة ووردبريس مجانية لتحسين محركات البحث، مصممة لعصر البحث بالذكاء الاصطناعي. توفر الإضافة تحليلاً للصفحات، بيانات منظمة (Schema)، خرائط مواقع XML، تتبع ترتيب الكلمات المفتاحية، وتكاملاً مع Google Search Console وGoogle Analytics 4 — كل ذلك مجانًا بالكامل. تدعم الإضافة اللغة العربية بشكل كامل: واجهة إدارة بتصميم من اليمين إلى اليسار (RTL)، تحليل محتوى يراعي خصائص اللغة العربية، وأداة لتوليد كلمات مفتاحية بلهجات عربية مختلفة (خليجية، مصرية، لبنانية، وغيرها). الإضافة مثالية لمواقع الشرق الأوسط ودول الخليج العربي التي تستهدف الظهور في نتائج البحث التقليدية ومحركات الذكاء الاصطناعي على حد سواء.
