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, a structured FAQ, 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, Amazon and Yep are pinged the second you publish. Google gets the URL pushed via sitemap re-submit + URL Inspection refresh + a one-click manual indexation request. The Search Console page shows clicks, impressions, CTR and position over 7 days to 16 months, the Google status of every URL, and a diagnostics panel when a sync returns nothing.
7. Builds your internal mesh. Every page gets a click depth and an inbound / outbound count (menus, archives, cross-sells included). Orphans, weakly linked pages and dead-ends are listed with one-click fixes, suggestions can be inserted in batches or from the post editor, and the automatic mesh links the right pages together — reversible, with a mesh score / 100 and an anchor report.
8. Keeps your link equity. 301 / 302 / 410 rules (exact or regex) with a live source tester, automatic redirects when a product, category or article is deleted or renamed, a grouped 404 monitor with one-click fixes, CSV import / export, and an on/off switch per rule.
9. Runs on autopilot. New products and categories are optimized when published, declining pages are re-optimized, missing alt texts are written on upload, articles are scheduled from your Search Console data, and a weekly e-mail report sums it up — all within a daily credit cap you control.
10. 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. Conversations and leads are listed in the admin (CSV export, GDPR retention).
11. Exposes your catalog to ChatGPT, Perplexity and Claude. Toggle on and Essiow serves a clean /llms.txt at your root. It is an answer-engine signal, not a Google one: Google states it ignores the file, the other assistants read it.
12. Puts your catalog in the shopping feeds. One ProductGroup markup with an offer per variant makes your variable products eligible for Google free listings, and a product feed file (Google Merchant Center, Meta, Pinterest) is served by your shop and fetched automatically. The file alone needs no connection: you paste its URL in the platform and it fetches daily.
13. Watches your page experience. Core Web Vitals from real Chrome users (LCP, INP, CLS) plus a Lighthouse score per page template, a ~40-point technical audit of your server, database, assets and images, and one-click fixes for the safe ones — each reversible.
14. Finds your off-site opportunities. Essiow searches for pages that mention your brand without linking to it, lists sites worth contacting, and reports external links that now hit a 404 so you can redirect them in one click. It detects and drafts the e-mail — it never creates a link for you, and buying links is not part of the product.
15. Publishes on a rhythm you set. The content plan turns keywords, your categories and your Search Console gaps into a 14-day calendar: pick how many articles per day or per week, the days, the hour and the output (draft, scheduled or published). An activity register keeps every long action marked until it finishes — closing the tab or reloading the page changes nothing.
16. Gets your shop ready for Google Merchant Center. Most refusals and suspensions are about the shop, not the feed: a return policy left as a draft, the WooCommerce template text still in place, guest checkout closed, prices shown excluding tax, a page nobody can reach. Essiow audits 95 of those points the way a Google reviewer reads your site, tells you what is missing in plain words, and fixes what can safely be fixed — every fix reversible. Connect your Merchant Center account and you also get the account and product problems Google reports, in your own language, with the exact attribute in cause, plus an e-mail the day the account gets suspended. Essiow prepares, diagnoses and fixes; Google decides — no plugin can promise an approved account, which is why the review request stays locked until every blocking check is green (you only get one real appeal).
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
- A persistent SEO score / 100 on every product and category, with a factor-by-factor audit, filters and sorting
- One consistent admin: a dashboard with a site score and a prioritized to-do list, KPI on every page, server-side filters, side panels for previews, a floating bar for bulk actions
- Every long action stays marked until it ends, survives a page reload, and is listed in one activity centre
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, product feeds, Core Web Vitals, the off-site scan and the whole Merchant Center diagnostic — free (no AI involved)
- Inside Merchant Center, only the assisted fixes call the AI (a return, shipping or contact page written from your own settings, a product title or description rewritten to the feed rules). Automatic fixes — publishing a draft page, reopening guest checkout, switching prices to tax-included — cost nothing.
- 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.
Screenshots














Installation
- Upload the
essiowfolder to/wp-content/plugins/ - Activate the plugin through the ‘Plugins’ menu in WordPress
- Go to Essiow > Settings and enter your API key from essiow.com
- Click «Test Connection» to verify
- Start optimizing from Essiow > Products or Essiow > Categories
FAQ
-
Do I need an Essiow account?
-
Yes. Create a free account at 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.
-
What is the SEO score shown on products and categories?
-
A local audit out of 100 (title and meta lengths, focus keyword, description length and structure, image alt texts, FAQ, schema…). It is computed by the plugin, never costs a credit, and is stored so you can filter and sort the catalog by score. Rating a large catalog happens progressively in the background of the Products page.
-
Does the plugin slow down my store?
-
No. Nothing runs on the storefront except the optional chat widget, the JSON-LD schemas (cached) and the redirect lookup (cached). Bulk jobs, syncs and automations run through WP-Cron or on the Essiow servers.
-
What happens when I update the plugin?
-
Nothing to do: the plugin migrates its own data at the first request after an update (database tables, new options with safe defaults, expired caches). Your API key, settings, optimizations and redirects are kept.
-
What is removed when I delete the plugin?
-
All options, cached data, scheduled tasks, tables (agent conversations and leads, redirects, 404 log, automation queue, content plan, speed runs, off-site findings) and Essiow metadata. If «Restore originals on uninstall» is enabled in Settings, the original titles, descriptions, SEO meta and alt texts are put back and the internal links added by Essiow are removed.
-
Does Essiow build backlinks for me?
-
No, and it never will. The Off-site module searches for pages that already mention your brand without linking to it, lists sites worth contacting and reports external links that now hit a 404. It prepares the outreach e-mail; you send it and the other site decides. Nothing is posted, bought or published anywhere on your behalf.
-
What does /llms.txt actually do?
-
It exposes a clean summary of your catalog to AI assistants. It is an answer-engine signal, not a Google ranking factor: Google has stated it ignores the file. Keep it on if you care about ChatGPT, Perplexity or Claude citing your shop; it costs nothing either way.
-
Do I need a Google API key for the Speed module?
-
Only for the Field tab. Core Web Vitals from real users and the Lighthouse score come from the free PageSpeed Insights API. The technical audit and its fixes work without any key.
-
Does the product feed need a Google Merchant Center connection?
-
No. Essiow serves the feed file at your own domain and you paste that URL in the platform (Google Merchant Center, Meta or Pinterest), which fetches it daily. The Eligibility tab lists what each item is still missing. Connecting your Merchant Center account is a separate, optional step that adds Google’s own verdict on top.
-
Will Essiow get my Merchant Center account approved?
-
No, and no plugin can: Google decides. What Essiow does is remove the reasons for a refusal before you ask — it audits 95 points the way a reviewer reads your shop, explains each failure in plain words, and fixes the ones that can be fixed safely. The review request button stays locked until every blocking check is green, on purpose: you only get one real appeal, and each refusal lengthens the wait.
-
What does the Merchant Center diagnostic actually check?
-
Your shop, not your feed: HTTPS and reachability, return and shipping policies (published, not the WooCommerce template, complete), contact details and legal identity, the checkout end to end (guest checkout, payment method, terms, order e-mails), prices and tax display, placeholder content, structured data, and your product data (titles, descriptions, images, GTIN, category, variants). The probe reads your shop from your own server, so it cannot see blocking that depends on the visitor’s country or IP — those checks say so instead of claiming to be covered.
-
Do I need a Google Cloud project to connect Merchant Center?
-
No. The authorization goes through essiow.com: you sign in with Google, accept the access, and come back. No WordPress.com account, no Cloud project, no API key to create. Disconnecting removes the link on both sides.
-
If I close the tab during a long job, do I lose it?
-
No. Optimizations, bulk generations, scans and measurements are registered server-side. The item stays marked until the job finishes, the state comes back after a reload, and the activity centre in the top bar lists everything currently running.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Essiow — AI SEO Suite for WooCommerce” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Essiow — AI SEO Suite for WooCommerce” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.4.0
- New — Merchant Center. A new page that audits your shop the way a Google reviewer reads it: 95 checks in eight families (reachability and indexability, policy pages, identity and contact, checkout, prices and tax, content quality, structured data, product data), each failure explained by what is actually missing — «the return policy does not say who pays the return shipping», not «policy incomplete». Checks run in steps, products in batches, and the run survives a page reload.
- Merchant Center — fixes. Automatic fixes publish a policy page left as a draft, leave «coming soon» mode, remove a noindex or a password, attach the terms to the checkout, reopen guest checkout, switch the price display to tax-included, or replace a main image that is too small with a compliant one from the gallery. Assisted fixes write a return, shipping or contact page from your own shop settings, or rewrite a product title, description, category or attributes. Manual fixes ask you only for what you alone know. Everything is logged, reversible, and re-checked right after it is applied. A text that falls back to the WooCommerce template or still carries a
{{…}}marker is never published — that template text is exactly what Google sanctions. - Merchant Center — Google connection. One click through essiow.com: no WordPress.com account, no Google Cloud project, no API key. Pick or create the account, verify then claim the site, declare the Essiow feed as a data source with its daily fetch hour, run the first fetch. A permanent status banner and a five-step connection check, on the Search Console model. Site claimed by another account, business identity pending, account suspended and revoked token each get a short message and one action.
- Merchant Center — what Google reports. Account problems rendered by Google in your own language, with severity, explanation, documentation and the local check that fixes them; per-product serving status with the exact reason and the attribute in cause, filters, search, server-side pagination and bulk re-read. Statuses are read in batches, never product by product. A daily check e-mails you on a suspension or a new blocking issue — and the review request stays locked until every blocking check is green.
- Feed. Feed and markup prices now come from the same source as the page (
wc_get_price_to_display), so the feed can no longer contradict the shop.sale_priceis only sent while the sale actually runs, with its effective date. The brand is no longer filled with the site name, andidentifier_existsis only sent when the answer is known. New columns: Google product category, age group, gender, size type and system, custom labels 0-4. A title or description written by the AI is declared to Google as such (structured_title/structured_descriptionwithdigital_source_type), as Merchant Center requires. - Product markup. Every published product is marked up, not only the ones optimized by Essiow. The duplicate-markup guard now observes whether another plugin really writes a Product block instead of assuming it. No aggregate rating unless reviews actually carry a rating.
- Consistency. The Feeds page and the Merchant Center page say what each of their counters measures and link to each other; the eligibility lights can no longer be green where the diagnostic is red (they name the failing checks instead); one date format per screen; the Merchant Center entry sits in the menu, the top bar, the Help modules list and the screenshots in the same order.
- Upgrade & uninstall. The audit table and the new options are created at the first request after the update, crons are armed, nothing is lost — no reactivation, no need to open the page. Uninstall removes the new table, options and scheduled tasks; two long-standing causes of leftovers were fixed at the root (the activity register recreating its own option, and WordPress rescheduling a recurring event through
spawn_cron()seconds after the purge). - Honest documentation. No promise that Merchant Center will accept the account: Essiow prepares, diagnoses and fixes, Google decides. The probe says what it cannot see (it reads your shop from your own server, so no geo-blocking or WAF), and the checks that depend on it are marked partial instead of being presented as covered.
- Developer. New AJAX actions
essiow_gmc_*(22, all covered by the smoke test), the{prefix}essiow_gmc_audittable, theessiow_gmc_audit_weeklyandessiow_gmc_dailycrons, theessiow_gmc_tabsandessiow_gmc_statefilters for adding a tab to the page without touching it, a Merchant Center API mock with six failure modes, an upgrade scenario from 1.3.0 across the 15 admin pages, and an updated inventory inCONTRIBUTING.mdanddocs/DESIGN.md.
1.3.0
- New — Speed. Core Web Vitals from real Chrome users (LCP, INP, CLS, FCP, TTFB) with a 10-month trend, a Lighthouse score per page template (mobile / desktop) with its «what to fix first» list, and a technical audit of about forty checks on your server, database, assets and images. The safe fixes are applied in one click and can be undone; the risky ones stay behind an explicit confirmation. Weekly measurement, optional e-mail alert, free PageSpeed API key needed only for the field data.
- New — Off-site. Finds pages that mention your brand without linking to it, lists sites worth contacting, and drafts the outreach e-mail for you. A «Lost links» tab in Redirects shows the external links that now hit a 404 with the visits they used to bring, and turns them into a 301 in one click. Essiow never creates, buys or posts a link — it detects and prepares, you decide.
- New — Product feeds. One feed file per platform (Google Merchant Center, Meta, Pinterest) served by your own shop and fetched daily — no OAuth, no app review. Built-in validation lists every rejected or incomplete item, and an Eligibility tab explains what is still missing for Google free listings. Optional exclusion of out-of-stock items and a cap on the number of items.
- New — Content plan. Turn keywords, your product categories and your Search Console gaps into a publishing rhythm: N articles per day or per week, active days, generation hour, publishing window, and output as draft, scheduled or published. A 14-day calendar shows what comes next, items can be reordered by priority, and the plan shares the same daily credit cap as the rest of the automations. Catch-up after a missed run, pause when credits run low, e-mail when the plan is done.
- Product schema. Variable products now emit a single
ProductGroupwith one offer per variant (instead of an aggregate), variant attributes asvariesBy, product specifications, and shipping details read from your real WooCommerce shipping zones — which is what Google asks for to consider a variable product for free listings. - Front-end SEO. Image sitemap,
hreflangwithx-defaulton multilingual sites (Polylang, WPML), complete sharing tags, and business-profile fields (coordinates, price range, area served, Google Business Profile link, X / Twitter handle) feeding the Organization / LocalBusiness schema. - Search Console reliability. The connection banner now shows a real health state (healthy, degraded, reconnection required) that survives a reload, a «Check the connection» button, and an explicit diagnostic whenever a sync returns nothing. Sync results and quota cooldowns are reported everywhere instead of failing silently.
- Activity register. Every long action (optimizations, generations, scans, measurements) is registered server-side: the item stays marked until the job ends, the state comes back after a reload or in another tab, AI generations run one at a time per site, and the top-bar activity centre lists what is running. One loading indicator per zone, everywhere — a toast now announces a result, never the start of an action.
- Consistency. The Essiow menu follows the same order as the top navigation, action columns fit on one line at 1280 px, «Top queries» and «Top pages» no longer overflow their card, the dashboard and the Products page count optimized products the same way, and duplicated buttons («Run queue now», «Bulk generation») appear once per screen. Lighter wording across every page: shorter subtitles, one line of help per block, no repeated explanations.
- Upgrade & uninstall.
essiow_run_upgrade()creates the new tables (speed runs, off-site findings, content plan) and their default options at the first request after the update — no reactivation, no need to open the module’s page. Crons for the new modules are armed automatically, and uninstall removes every new table, option and scheduled task. - Honest documentation. No FAQ rich-snippet promise,
/llms.txtdescribed for what it is (an answer-engine signal Google states it ignores), the IndexNow engine list kept accurate (Bing, Yandex, Naver, Seznam, Amazon, Yep), and no backlink-building claim anywhere. - Developer. New AJAX actions
essiow_speed_*,essiow_offsite_*,essiow_lost_*,essiow_feeds_*,essiow_plan_*andessiow_activity_*, all covered by the smoke test; a real upgrade scenario from 1.2.0 (bin/upgrade-test.sh) checking data, schema, defaults and crons across the 14 admin pages;bin/shot.shcovering every page; inventory of actions, options, tables, crons and storage keys inCONTRIBUTING.mdanddocs/DESIGN.md; regenerated translation template.
1.2.0
- Design : the whole admin is rebuilt on one design system — top bar with module navigation, connection / credits / Search Console / IndexNow status and a quick search, a header with primary actions on every page, KPI tiles, server-side filters remembered per page, 44 px tables with sticky headers, a floating bar for bulk actions, side panels for previews and details, styled confirmations (no more browser dialogs), illustrated empty states, skeleton loaders, SVG icons (Lucide) instead of Dashicons, keyboard-friendly panels and tabs, and layouts checked at 1280 / 1024 / 782 px.
- Dashboard : site SEO score ring with breakdown and «Fix» links that open the right tab, four KPI (products, articles, Search Console clicks, indexed pages), a second row for the modules (average SEO score, internal mesh score, automation queue, redirects and 404), a prioritized «To do now» list that also reports the week’s 404s and failed or paused automations, recent activity and shortcuts. The setup wizard is kept for new sites.
- Products & Categories : a persistent SEO score / 100 on every product and category (
_essiow_seo_score, rated progressively in batches), global KPI with score distribution, server-side filters (name / SKU, status, score, category, sort, page size) kept in the URL and in the browser, a fixed paginated table, «select the page» or «select the whole filter» with a floating bar, a preview panel with a factor-by-factor audit, before / after scores, FAQ and restore, and a restyled bulk job (pause, resume, cancel, failed items). Optimizing or restoring no longer reloads the page. - Search Console : an always-visible connection banner (account, property with selector, last sync, rows stored, diagnostics when a sync returns nothing), a single Overview tab (7 days to 16 months, KPI with deltas, clicks and impressions curve, indexation summary, top queries and pages), plus Indexation, Opportunities, Issues, Submission (sitemap, IndexNow queue with «flush now», llms.txt) and Audit tabs; daily totals kept for 16 months, weighted average position, titles decoded.
- Internal links : inventory rules made explicit (published content only, noindex / password-protected / system pages excluded, WordPress pages optional, manual exclusions), click depth per page, server-side metrics and mesh score, a real automesh plan with configurable quotas, batch suggestions with one-way insertion and ignored pairs, a force-directed SVG graph with filters and focus, an anchor report, settings tab, and a repaired editor meta box.
- Blog : a three-step generator (topic with SEO research and Search Console ideas, options for length / tone / language / linked products / featured image, progress), preview in a side panel (score, audit, FAQ, sources; publish, schedule or draft), a server-side article list (search, status, source, score, pagination, bulk IndexNow), bulk generation as a wizard with job details, and E-E-A-T settings (default author, default status, publishing window).
- Automation : one card per automation with an on / off switch, inline settings saved automatically, next run and last result, a paused-queue notice, and queue / log tables with retry and clear actions.
- Redirects : KPI, server-side filters (type, status, sort), an add / edit panel with a live test of the source path, CSV import in a panel, a grouped 404 monitor with suggested targets, a settings tab, and an active / inactive switch per rule (new
activecolumn, migrated automatically). Duplicate regex patterns are refused. - AI Agent : status and quota KPI (messages per hour), Settings / Conversations / Leads tabs, identity and widget cards with a live preview, knowledge, delivery and returns, behaviour, coupons, bank details and privacy cards, conversation transcripts in a side panel with deletion, leads list with CSV export, and a modernized storefront widget (SVG icons, Escape to close,
#essiow-chatdeep link). - Upgrade & uninstall :
essiow_maybe_upgrade()runs idempotent migrations at the first request after any update (default options, database tables via dbDelta, expired caches purged, orphan cron hooks removed,essiow_upgradedaction for extensions) — no reactivation needed. Uninstall now removes every option, transient, table, cron, post / term / user meta added since 1.1.79 and still restores the original content when the option is enabled. - Developer : page styles live in
assets/css/pages/<slug>.css(loaded automatically),Essiow_Admin::icon / page_header / kpi / empty_stateandEssiowUI.icon / confirm / drawer / bulkBar / pagination / setKpihelpers documented indocs/DESIGN.md, a demo environment (bin/smoke.shwithSEED=1, mock API,bin/shot.shscreenshots), an upgrade scenario (bin/upgrade-test.sh) and an uninstall check (UNINSTALL=1) in the smoke test, the smoke test covering every page, AJAX action, cron and front page, new server filters on the products / categories / articles / redirects lists, and a regenerated translation template.
1.1.81
- Langues : toutes les chaînes sources unifiées en anglais (convention WordPress.org), catalogue régénéré (1 665 chaînes) et traductions complètes livrées en français, espagnol, allemand, italien, portugais et néerlandais (.po + .mo). Sur les sites multilingues (Polylang, WPML), la langue de génération suit celle du produit, de la catégorie ou de l’article ; le chatbot répond dans la langue de la page.
- Automatisation (nouveau menu) : file d’attente avec plafond de crédits par jour, optimisation automatique des nouveaux produits et catégories à la publication, blog en pilote automatique (sujets tirés de Search Console ou des catégories sans article, N articles par semaine), ré-optimisation des pages en déclin, texte alternatif à l’upload, rapport hebdomadaire par email, journal et boutons « Exécuter maintenant ».
- Design : pages Produits, Catégories, Blog, Search Console, Maillage et Agent alignées sur le tableau de bord (bandeaux KPI, filtres par statut / score / catégorie, tri, sélection des non optimisés, états vides, chargements, dashicons à la place des emoji, générateur d’articles en deux colonnes, cartes de jobs, responsive).
- Performance et robustesse : JavaScript découpé par écran (seul le script de la page est chargé), schémas Product et Organization mis en cache, catégorie des articles bulk « produits » retrouvée, lien support du chat corrigé, intégration continue (lint PHP 7.4 / 8.3, syntaxe JS, catalogue à jour, test d’exécution complet dans WordPress + WooCommerce).
1.1.80
- SEO technique complet sans plugin SEO : title, meta description, canonical, OpenGraph et Twitter sur produits, catégories, boutique et accueil (modèles configurables) ; schéma Organization / LocalBusiness / Store avec logo, profils sociaux et horaires ; WebSite + SearchAction.
- Robots : noindex des produits en rupture (option), des archives d’étiquettes et de la recherche interne, canonical propre et noindex sur les vues filtrées (
orderby,filter_*, prix, utm…), exclusion des produits noindex du sitemap. - Schéma Product enrichi : marque, SKU, GTIN/MPN, disponibilité (précommande, réassort),
priceValidUntil, politique de retour, frais et délais de livraison, AggregateOffer pour les variables — sans doublon avec Yoast WooCommerce / Rank Math / AIOSEO. - FAQ produit générée par l’IA : 3 à 5 questions d’acheteur stockées à l’optimisation, affichées en accordéon sur la fiche et balisées FAQPage.
- Redirections et 404 (nouveau menu) : règles 301 / 302 / 410 avec regex, redirection automatique des produits, catégories et articles supprimés et des changements de slug, journal des 404 avec suggestion de cible et création en un clic, import / export CSV, alerte par email au-delà d’un seuil.
- Blog E-E-A-T : encart auteur avec profils sociaux et schéma Person, blocs « À lire aussi » et « Produits liés », publication étalée du bulk sur N jours, rafraîchissement / remplacement d’un article existant sans doublon, liste enrichie (score, intention, temps de lecture, indexation), alertes qualité avant publication.
- Interface : design system unifié, barre supérieure avec état de connexion, crédits, Search Console et IndexNow, navigation transversale, tableau de bord avec KPIs, détail du score, actions rapides et activités récentes, assistant de démarrage en 4 étapes, réglages par onglets, page d’aide avec statut système.
1.1.79
- Sécurité de l’agent IA : les coordonnées bancaires ne sont plus envoyées à l’IA ni exposées sans activation explicite, les remises créent un coupon à usage unique réservé au client au lieu de modifier le prix réel, coupons et remises désactivés par défaut, limitation de débit par empreinte client et globale, jeton anti-abus sur l’endpoint public, conversations liées au visiteur (plus de reprise d’une conversation tierce), produits non publiés invisibles, email admin retiré des pages, leads stockés + export/effacement RGPD, mention de confidentialité dans le widget, widget absent du panier/checkout/compte.
- Sécurité des données catalogue : plus aucun forçage de stock à l’optimisation, sauvegardes unifiées (titre, nom, descriptions, meta SEO, alt d’images) restaurables depuis la liste produits et catégories, jamais d’écrasement par une valeur vide, renommage des catégories en option, choix des champs à réécrire et respect des meta SEO existantes.
- Bulk produits/catégories : verrou anti-doublon, budget de temps, reprise idempotente, items en échec signalés au lieu de bloquer le job, cron actif uniquement pendant un job.
- Search Console : IndexNow asynchrone (plus jamais de publication bloquée), sélecteur de propriété rétabli, canonical réversible et liste des canonicals actives (Yoast, Rank Math, AIOSEO, SEOPress), détails par page (requêtes top 10 / striking distance), export CSV des opportunités et de l’indexation, vue « pages en déclin » avec ré-optimisation en un clic, corrections OAuth (state), sous-répertoires, llms.txt en cache sans email.
- Maillage interne : injection sûre (jamais dans une balise, un shortcode, un bloc ou un titre), orphelins réels (archives, menus, ventes croisées comptés), plafonds respectés dans toutes les passes, plans déterministes, meta box de suggestions dans l’éditeur, auto-link à la publication (option), rapport d’ancres avec alerte de sur-optimisation, revert permanent et retrait de tous les liens Essiow, plus de révisions ni de dates modifiées en masse.
- Blog : planification de publication (date et heure).
- Connexion et réglages : déconnexion et rotation de clé enfin effectives, clé testée avant enregistrement, réglages réservés aux administrateurs, valeurs validées, journal des erreurs API, tableau de bord avec détail du score et checklist de lancement, nouvelles options (champs optimisés, IndexNow à la mise à jour, restauration des originaux à la désinstallation, multisite).
- Cycle de vie : tous les crons sont retirés à la désactivation, désinstallation propre avec restauration optionnelle des contenus d’origine.
- Nettoyage : une vingtaine d’endpoints morts supprimés, requêtes
ORDER BY RAND()retirées, pagination des catégories, chaînes dupliquées et non traduites corrigées.
1.1.78
- Articles ultra-optimisés SEO — recherche avant rédaction : avant de générer, Essiow interroge Google (People Also Ask, recherches associées, pages qui rankent, sous-titres des 3 meilleurs concurrents, longueur moyenne) et des sources externes autoritaires RÉELLES. L’IA répond à chaque question PAA, couvre tous les sous-thèmes des concurrents et ne peut citer que des URLs vérifiées. Bouton « Recherche SEO » sur la page Blog pour voir le dossier avant de lancer.
- Réponse directe en premier paragraphe (40-60 mots, featured snippet / AI Overviews), chaque H2 ouvre sur la réponse, tableaux comparatifs, étapes numérotées, points « À retenir », sommaire cliquable (ancres H2 conservées dans Gutenberg), FAQ normalisée, section « Sources ».
- Score SEO /100 et checklist renvoyés pour chaque article (mots, mot-clé dans titre/intro/H2/meta, longueurs meta, H2/H3, images + alt, liens internes/externes, FAQ). Affichés dans l’onglet SEO avant publication et stockés (
_essiow_seo_score). - Liens inventés supprimés : toute URL absente du catalogue (produits, articles, catégories, sources autorisées) est transformée en texte — plus jamais de 404 publié. Les liens externes reçoivent
rel="noopener"(+nofollowhors sources autoritaires). - Slug SEO issu du mot-clé (
post_name), FAQPage depuis les données structurées (plus de regex cassée par les blocs Gutenberg), BreadcrumbList,BlogPostingenrichi (wordCount, timeRequired, articleSection) — et plus de doublon de schéma quand Yoast / Rank Math / AIOSEO sont actifs. - Meta title / description / OG / Twitter rendus par Essiow quand aucun plugin SEO n’est installé ; support SEOPress ajouté ; le focus keyword est toujours écrit (bug de l’ancien early-return).
- Maillage inverse automatique : à la publication, 3 articles Essiow plus anciens et proches (tags / catégorie) reçoivent un lien « À lire aussi » vers le nouveau — le nouvel article a des liens entrants dès la première minute (désactivable : option
essiow_auto_backlinks). - Fixes : le champ « Titre (optionnel) » et la longueur sont enfin envoyés à l’API ;
$keywordsnon défini à la publication (focus keyword vide, exclusion GSC cassée) ; auteur 0 en cron bulk ; score dashboard IndexNow lisait la mauvaise option ; la longueur « court / moyen / long » du bulk était ignorée (2 500 mots forcés).
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. MaisBulkArticleService.create_jobreconstruisait le dict de configuration en ne retenant qu’une whitelist de clés (tone,length,language,blog_id, etc.) —wp_contextn’était PAS dans la whitelist, donc silencieusement éliminé. Conséquences en cascade :- Le worker Celery recevait
cfg.get('wp_context')Noneproducts = [],blog_posts = [],featured_image_pool = [] - L’IA recevait un prompt SANS produits aucune
<img>générée (l’IA ne pouvait pas inventer des URLs valides) - Pas de pool d’images vedette pas d’image vedette attachée au post
- Le sanitizer auto-injection ajouté en 1.1.75 s’appuyait sur
article_data.products(vide aussi) ne pouvait rien injecter non plus - 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.
- Le worker Celery recevait
- Fix : ajout de
wp_contextetsite_urldans 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
configimmuable 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 :
- Featured image via attachment ID : avant, le plugin recevait une URL
https://site.com/wp-content/uploads/2024/10/widget-1024x768.jpg(taillelarge) et tentaitattachment_url_to_postidsouvent échec car cette fonction n’accepte que l’URL ORIGINALE sans suffixe-WxH. Désormais le plugin envoie l’image_iddirectement dansfeatured_image_pool; le worker stockefeatured_image_iddansgenerated_payload; le plugin attache viaset_post_thumbnail($post_id, $id)— zéro HTTP, indestructible. - Auto-injection des images inline : l’IA esquivait parfois les
<img>même quand on lui listait les produits dans le prompt. Le sanitizer compte maintenant les<img>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<h2>, wrappées dans des<a>vers la page produit pour le SEO. Le plugin reçoit un article qui a TOUJOURS au moins 3 images contextuelles, peu importe ce que l’IA a fait. - Prompt durci : section IMAGES déplacée en MANDATORY (non-négociable), exige 3-6
<img>minimum, format explicite avec wrap<a href="PRODUCT_URL">pour cumuler valeur SEO.
- Featured image via attachment ID : avant, le plugin recevait une URL
- Fix HTTP 429 sur ping IndexNow : avant, un 429 (rate limit) cassait l’opération sans recovery. Désormais le retry honore le header
Retry-Afterquand IndexNow l’envoie, sinon backoff plus long. Côté UI, le toast affiche un message clair (« IndexNow rate-limited. Try again in a few minutes. ») au lieu d’un cryptique « HTTP 429 ». - Fix bouton « Indexer » qui ouvrait GSC dans une nouvelle fenêtre : avant, après IndexNow + sitemap submit, le plugin ouvrait automatiquement Google Search Console sur la page d’inspection de l’URL — Google affichait son texte par défaut « URL is not on Google. Couldn’t fetch it… » et l’utilisateur croyait à un échec de l’indexation. Désormais aucune ouverture automatique ; le toast affiche un récap clair des étapes effectuées (« ✓ IndexNow · Sitemap re-submitted · Indexation status refreshed »). L’URL GSC reste accessible si besoin via
data-hint-urlsur le bouton (extensible plus tard pour une UI dédiée). - Récap d’étapes détaillé dans
ajax_request_indexing: chaque sous-action (IndexNow, sitemap, inspection cache) renvoie son statut individuel. Les échecs partiels sont annoncés (⚠ IndexNow rate-limited) sans planter l’opération globale.
1.1.74
- Audit de vérification 1.1.73 : aucun handler legacy orphelin, lock transient correct, idempotence du pull garantie, sanitizer appelé avant le débit crédit. 1 seul vrai bug remonté, corrigé ici.
- Fix critique — page-close n’annule plus le job : avant 1.1.74, le
cancelAllBulksOnUnloadannulait toujours les bulks au refresh / fermeture d’onglet vianavigator.sendBeacon, ce qui était directement contraire à l’architecture jobs-serveur déployée en 1.1.72-73 (« rien ne s’arrête quand l’utilisateur ferme »). Le handler a été neutralisé : les jobs continuent côté serveur, le polling reprend automatiquement au rechargement. - Fix sites HTTP + installs en sous-répertoire : le sanitizer côté Flask reconstruisait
https://{domain}en ignorant le protocole et le subpath réels (info perdue côté serveur). Les sites en HTTP ou dans/shop/voyaient tous leurs liens internes stripés. Désormais le plugin envoie sonsite_urlcomplet (viahome_url('/')) dans le wp_context et dans le payload de/optimize/article— le sanitizer l’utilise comme base de résolution. - IndexNow retry exponentiel : avant, un seul shot avec timeout 5s. Un blip réseau ou un 503 transitoire perdait définitivement la soumission. Désormais : jusqu’à 3 tentatives avec backoff 0s / 1s / 3s. Les 4xx (clé / URLs invalides) court-circuitent — pas de retry sur erreurs déterministes. Timeout porté à 10s. Le log historique inclut maintenant
attemptseterrorpour audit. - Cleanup auto des cannibalisations dismissed/resolved obsolètes : à chaque chargement de la page Search Console, on compare les clés stockées en options WP avec les paires (query|primary|secondary) actuellement présentes dans les données GSC live. Toute clé absente du live entrée stale supprimée. Évite l’accumulation indéfinie (plusieurs centaines par an sur sites actifs).
- Helper
apiError(xhr, defaultMsg)côté JS : les erreurs AJAX étaient toutes affichées comme'Network error'quelle que soit la cause. Désormais détection automatique via le code HTTP etresponseJSON.data.code:- Status 0 « Cannot reach the server. Check your internet connection. »
- 401/403 ou code
invalid_api_key« API key invalid or expired. Reconfigure in Settings. » - 402 ou code
insufficient_credits« Plan ran out of credits. Upgrade in Settings. » - 429 ou code
rate_limited« Too many requests. Try again in a minute. » - 503/504 ou code
overloaded« Server overloaded. Try again in 30 seconds. » - 5xx « Server error. Try again or contact support. »
- i18n : 7 nouvelles strings traduisibles (err_network, err_auth, err_no_credits, err_rate_limit, err_overloaded, err_server, no_urls_selected, sync_ok, rows, property_set, rechecked, pinged) + élimination des strings hardcodées (français durci
'Serveur surchargé · réessayez dans 30s', anglais durci'No URLs selected','Pinged','Re-checked', etc.).
1.1.73
- Audit complet du plugin + backend — 4 axes audités en parallèle (bulk produits/catégories, génération articles, Search Console, UX). 14 bugs et améliorations livrés en une release.
- Phase 2 wirée sur l’UI : les boutons « Optimiser sélection » des pages Produits et Catégories utilisent désormais le nouveau système jobs serveur (
essiow_bulk_opt_create). Concrètement : vous lancez, vous pouvez fermer l’onglet, vous revenez 1 heure plus tard — le job a continué côté serveur, le WP-Cron a appliqué les optimisations au fur et à mesure, et l’UI affiche l’état final. - Auto-resume au chargement de la page : si un job était en cours quand vous avez quitté, l’UI redémarre automatiquement le polling et affiche la progression (via
sessionStoragecôté navigateur). - Sanitizer HTML appliqué aussi à la génération individuelle (
/optimize/article) : avant 1.1.73, le post-processing des images placeholder et liens relatifs ne tournait que sur le bulk. Les articles générés un par un héritaient des mêmes bugs. Maintenant la même protection s’applique partout —<img src="IMAGE_URL">strip ou fallback,<a href="produit/x">relatif URL absolue canonique, sinon unwrap. - Race condition sync-pull + WP-Cron pull supprimée : un transient lock par job (
essiow_bulk_pull_lock_{id}) empêche les deux processus de pull les mêmes items simultanément et d’appelerwp_insert_postdeux fois plus de duplicates côté WP. - Idempotence du pull renforcée : chaque post WP est marqué
_essiow_bulk_item_id. Si Flask renvoie le même item après un retry, on détecte le post existant et on re-confirme à Flask au lieu d’insérer un duplicate. - Subdirectory install supporté dans
resolve_url_to_local: si WordPress est installé dans/wp/(ou autre sous-répertoire), GSC renvoie l’URL avec le préfixe subdir, maisurl_to_postid()attend le path relatif. Le résolveur retire maintenant le préfixe et retente. - Cleanup hourly des state tokens OAuth Google expirés (Celery beat) — sans ce nettoyage, la table
gsc_oauth_statesaccumulait une ligne par démarrage de flow OAuth, même ceux abandonnés en route. - Confirms actionnables …
