=== AdWorksBid SEO ===
Contributors: adworksbid
Tags: seo, sitemap, rank tracker, google search console, on-page seo
Requires at least: 6.0
Tested up to: 6.9
Stable tag: 1.1.4
Requires PHP: 7.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Complete SEO plugin. On-page analysis, XML sitemaps, rank tracking, local SEO, GSC & GA4 integration, redirects, broken links, schema, and more — all free.

== Description ==

AWBSEO is a full-featured SEO plugin for WordPress. Everything listed 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 AWBSEO 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 AWBSEO inject the correct hreflang link elements in `<head>` across your site.

**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.

**Extend with AWBSEO Pro**
AWBSEO Pro is a separate, optional add-on plugin available at [adworks.bid/awbseo-pro](https://adworks.bid/awbseo-pro/). It adds AI features, Revenue Intelligence, white-label client reports, Core Web Vitals monitoring, AI Link Architecture, and more. The free plugin works fully without it.

== Installation ==

1. Upload the `awb-seo` folder to `/wp-content/plugins/`.
2. Activate the plugin through the **Plugins** screen in WordPress.
3. Go to **AWBSEO → 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. AWBSEO Pro is a separate add-on, not a trial or upgrade gate on the free features.

= Does this plugin track my users? =

No. AWBSEO 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 AWBSEO.

== 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 ==

This plugin connects to the following external services when you explicitly configure and use those integrations. No data is sent automatically without user action.

= Google Search Console API =
Used to pull clicks, impressions, CTR, and position data into your WordPress dashboard. Activated when you connect GSC via OAuth in Settings. Data is sent to `https://searchconsole.googleapis.com` and `https://oauth2.googleapis.com`.
* [Google Privacy Policy](https://policies.google.com/privacy)
* [Google Terms of Service](https://policies.google.com/terms)

= Google Analytics 4 API =
Used to display GA4 traffic data in the dashboard. Activated when you connect GA4 via OAuth in Settings. Data is sent to `https://analyticsdata.googleapis.com` and `https://analyticsadmin.googleapis.com`.
* [Google Privacy Policy](https://policies.google.com/privacy)
* [Google Terms of Service](https://policies.google.com/terms)

= Bing Webmaster Tools API =
Used to pull Bing search performance data and submit sitemaps. Activated when you connect Bing in Settings. Data is sent to `https://ssl.bing.com/webmaster`.
* [Microsoft Privacy Statement](https://privacy.microsoft.com/en-us/privacystatement)
* [Microsoft Services Agreement](https://www.microsoft.com/en-us/servicesagreement)

= IndexNow API =
Used to notify search engines (Bing, Yandex, Cloudflare) when URLs are published or updated. Activated only when the Instant Indexing feature is enabled and auto-submit is turned on in Settings. URLs are sent to `https://api.indexnow.org/indexnow`.
* [IndexNow Privacy Policy](https://www.indexnow.org/privacy)
* [IndexNow Terms](https://www.indexnow.org/terms)

= AdWorks.Bid OAuth Broker =
Used to exchange Google OAuth authorization codes for access tokens without exposing client secrets in the browser. Activated when you connect GSC or GA4. Your site URL, a temporary authorization code, and a nonce are sent to `https://oauth.adworksbid.com`. No post content or user data is transmitted.
* [AdWorks.Bid Privacy Policy](https://adworks.bid/privacy-policy)
* [AdWorks.Bid Terms of Service](https://adworks.bid/terms-of-service)

= Google Fonts (Cairo) =
Used to load the Cairo typeface for the plugin admin interface. A request is made to `https://fonts.googleapis.com` on every AWBSEO admin page load to fetch the font stylesheet. No user data is transmitted — only a standard browser font request.
* [Google Privacy Policy](https://policies.google.com/privacy)
* [Google Fonts Terms of Service](https://developers.google.com/fonts/faq/privacy)

== Changelog ==

= 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 — "AdWorksBid SEO 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 "AdWorksBid SEO" for WordPress.org directory compliance.
* Tested up to WordPress 6.9.
* 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.
