=== Essiow — AI SEO Suite for WooCommerce ===
Contributors: boni58
Tags: woocommerce, seo, ai, product-descriptions, chatbot
Requires at least: 5.8
Tested up to: 6.9
Requires PHP: 7.4
Stable tag: 1.1.77
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Get more Google traffic on WooCommerce. AI rewrites your products, categories and articles using your real Google Search Console data — and pings every search engine to index changes instantly.
== Description ==
**Essiow turns your WooCommerce store into a search-traffic machine.** It plugs into Google Search Console, watches what your customers actually search for, and rewrites your product pages, category pages and blog articles to capture every query you nearly rank on.
You don't write SEO. You don't pick keywords. You don't guess what works. You click a button and the right pages get fixed.
= What Essiow does for you =
**1. Auto-rewrites your product pages.** Long description, short pitch, meta title, meta description, focus keyword, image alt texts — all generated from your real GSC queries when connected, in 8 languages, in your store's tone. Compatible with Yoast SEO, Rank Math and All in One SEO.
**2. Turns empty category pages into landing pages.** Bare category pages don't rank. Essiow generates 1,500-2,500 words of category content with FAQ, comparison tables and links to your top products — the page Google needs to rank you in position 1 instead of position 30.
**3. Writes blog articles that pull traffic to your products.** 1,500-5,000 word articles with internal links to the products mentioned, FAQ schema, automatic featured image. Suggestions based on what your audience already searches.
**4. Spots and grabs every "almost-ranking" keyword.** When Google Search Console is connected, Essiow surfaces every query where your store sits at position 11-20 — the closest gains. One click rewrites the matching page targeting that exact query.
**5. Resolves cannibalization in two clicks.** Two of your pages competing for the same query? Essiow detects it, picks the strongest one, and consolidates the canonical from the others — without deleting anything.
**6. Indexes everything instantly.** Bing, Yandex, Naver, Seznam are pinged the second you publish. Google gets the URL pushed via sitemap re-submit + URL Inspection refresh + a one-click manual indexation request.
**7. Builds your internal mesh in a graph view.** See orphan pages (no incoming links), dead-ends (no outgoing), and connect any two pages with a drag — Essiow injects reciprocal anchor links on the strongest shared keyword. A live mesh score / 100 tells you how healthy your site structure is.
**8. AI sales agent on your storefront.** A chatbot that knows your full catalog, handles objections, can issue promo codes within your discount limit, and quotes your delivery / returns / payment policy.
**9. Exposes your catalog to ChatGPT, Perplexity and Claude.** Toggle on and Essiow serves a clean `/llms.txt` at your root — the standard AI search engines read to find products to recommend.
= Why it ranks better =
When Search Console is connected, every optimization sees the actual queries the page is already ranking on, the striking-distance keywords just outside page 1, and the CTR alerts when a title is converting poorly. The AI doesn't guess keywords — it gets them from Google itself, and writes around what's already working.
= Made for shop owners, not SEOs =
* No keyword research needed
* No technical setup beyond pasting an API key
* Every action shows its credit cost upfront — no surprise billing
* Bulk optimize, pause, resume, restore original — your content is always recoverable
* 8 languages, 4 writing tones, 3 content lengths
= Compatible & safe =
* WooCommerce HPOS compatible
* Works alongside Yoast SEO / Rank Math / All in One SEO (writes to all three)
* GDPR compliant (auto-delete chat data after 90 days)
* Original content backed up the first time you optimize — one-click restore
= How credits work =
* **1 credit** per product optimization
* **1 credit** per category optimization
* **3 credits** per blog article
* **2 credits** per AI Vision alt text generation
* All indexation actions, audits, internal-link suggestions, mesh-score, /llms.txt — **free** (no AI involved)
* Credits are debited only on success. Failed AI calls don't consume credits.
* Purchased credits never expire (free trial credits expire after 30 days)
= External Service =
This plugin connects to the Essiow API at `https://essiow.com/api/v1` to process AI content generation. Your product data (names, descriptions, prices, categories) is sent to the Essiow servers where it is processed using OpenAI's models. No data is stored beyond what is needed to track your credit usage.
* [Essiow Terms of Service](https://essiow.com/terms)
* [Essiow Privacy Policy](https://essiow.com/privacy)
== Installation ==
1. Upload the `essiow` folder to `/wp-content/plugins/`
2. Activate the plugin through the 'Plugins' menu in WordPress
3. Go to **Essiow > Settings** and enter your API key from [essiow.com](https://essiow.com)
4. Click "Test Connection" to verify
5. Start optimizing from **Essiow > Products** or **Essiow > Categories**
== Frequently Asked Questions ==
= Do I need an Essiow account? =
Yes. Create a free account at [essiow.com](https://essiow.com) to get your API key and 10 free credits.
= Do I need technical skills? =
No. If you can install a WordPress plugin, you can use Essiow. Everything is done in a few clicks.
= Do I need to know SEO? =
No. Essiow does the SEO work : it picks the keywords (from Google Search Console when connected), writes the meta tags, generates the schema, builds the internal links and submits everything to search engines. You just click "Optimize".
= Why does connecting Google Search Console matter? =
With GSC connected, every optimization is fed with the real queries your page already ranks on. Essiow finds queries where you sit at position 11-20 (just outside page 1) and rewrites the matching page targeting that exact query. Without GSC, optimizations are still good — but generic. With GSC, they're surgical.
= Will optimizing break my existing content? =
No. The first time a product or category is optimized, the original content is backed up automatically. One click in the preview modal restores it.
= Which SEO plugins are supported? =
Essiow works with Yoast SEO, Rank Math, and All in One SEO. It writes to all three formats simultaneously, so switching SEO plugin later does not lose your data.
= Is my data safe? =
Your product data is sent to Essiow servers only during optimization. It is processed in real-time and not stored beyond credit-tracking metadata. Chat conversations are auto-deleted after 90 days per GDPR requirements.
= Do credits expire? =
Purchased credits never expire. The 10 free credits expire after 30 days.
= Can I cancel a bulk optimization? =
Yes. Pause / Resume / Cancel buttons appear during a bulk run. Closing the tab also auto-cancels — items already processed remain saved.
= Can I try before buying? =
Yes. Create a free account and get 10 credits to test all features. No credit card required.
== Screenshots ==
1. Dashboard with connection status and credit balance
2. Product optimization with SEO score and bulk actions
3. Category optimization with rich content preview
4. Blog article generator with async processing
5. AI Sales Agent configuration
6. Settings page with API connection
== Changelog ==
= 1.1.77 =
* **Parité complète bulk ↔ individuel — contexte GSC ajouté au worker bulk** : c'était la dernière différence restante. La génération individuelle d'articles enrichissait son prompt avec les vraies queries Google Search Console matchant le keyword (28 derniers jours, agrégées par impressions), permettant à l'IA de cibler ce que l'audience tape déjà. Le bulk générait "à l'aveugle". Désormais : avant chaque génération bulk, le worker appelle `_build_gsc_context_for_article(site, item.keyword)` et injecte le résultat dans le prompt — exactement comme l'individuel.
= 1.1.76 =
* **CAUSE RACINE TROUVÉE — toutes les images bulk étaient bloquées par un filtre silencieux côté backend** : depuis 1.1.69, le plugin envoyait soigneusement le `wp_context` (produits avec image_id/image_url, articles, catégories, pool d'images vedette) au backend Flask. Mais `BulkArticleService.create_job` reconstruisait le dict de configuration en ne retenant qu'une **whitelist de clés** (`tone`, `length`, `language`, `blog_id`, etc.) — `wp_context` n'était PAS dans la whitelist, donc **silencieusement éliminé**. Conséquences en cascade :
1. Le worker Celery recevait `cfg.get('wp_context')` → `None` → `products = []`, `blog_posts = []`, `featured_image_pool = []`
2. L'IA recevait un prompt SANS produits → aucune `` générée (l'IA ne pouvait pas inventer des URLs valides)
3. Pas de pool d'images vedette → pas d'image vedette attachée au post
4. Le sanitizer auto-injection ajouté en 1.1.75 s'appuyait sur `article_data.products` (vide aussi) → ne pouvait rien injecter non plus
5. Conclusion : tous les fixes images depuis 1.1.69 étaient **bloqués en amont**, c'est pour cela que les corrections successives ne donnaient rien visible.
* **Fix** : ajout de `wp_context` et `site_url` dans la whitelist. Les NOUVEAUX jobs bulk recevront enfin le contexte produit complet, et toute la chaîne d'images (génération IA + auto-injection sanitizer + image vedette via attachment_id) fonctionnera bout en bout.
* **Note** : les jobs créés AVANT 1.1.76 ont un `config` immuable en DB sans wp_context — relancer un nouveau bulk job pour bénéficier du fix.
= 1.1.75 =
* **Fix définitif — images vedette + images inline dans les articles bulk** :
1. **Featured image via attachment ID** : avant, le plugin recevait une URL `https://site.com/wp-content/uploads/2024/10/widget-1024x768.jpg` (taille `large`) et tentait `attachment_url_to_postid` → souvent échec car cette fonction n'accepte que l'URL ORIGINALE sans suffixe `-WxH`. Désormais le plugin envoie l'`image_id` directement dans `featured_image_pool` ; le worker stocke `featured_image_id` dans `generated_payload` ; le plugin attache via `set_post_thumbnail($post_id, $id)` — **zéro HTTP, indestructible**.
2. **Auto-injection des images inline** : l'IA esquivait parfois les `
` même quand on lui listait les produits dans le prompt. Le sanitizer compte maintenant les `
` valides après génération. Si moins de 3, il injecte automatiquement les images des produits restants, placées après les premières `
`, `