=== DraftSEO.ai === Contributors: klimentp Tags: ai, blog, content, publishing, seo Requires at least: 6.2 Tested up to: 7.1 Requires PHP: 7.4 Stable tag: 1.7.2 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Publish AI-generated blogs from DraftSEO.ai directly to WordPress with automatic image import and SEO optimization. == Description == Publish complete, AI-generated blog posts from DraftSEO.ai to WordPress in one click — or fully automatically. Images land in your own Media Library, SEO metadata is written to your SEO plugin, and categories and tags are applied. No copy-pasting, no manual uploads. = Key Features = * **One-click or automatic publishing** — Send finished blogs to WordPress as a draft, a scheduled post, or a live post. Turn on Auto-publish to have new blogs published for you. * **Images in your own Media Library** — Every image arrives already optimised as WebP, around ten times lighter than an unoptimised image, with its alt text and a file name that describes what it shows (for example "woman-meditating-by-a-window-v1.webp"). It is downloaded to your Media Library in the background — no external hotlinking, and no image-optimisation plugin needed. * **You stay in control** — A Settings tab lets you choose how the article title heading is handled and which structured data (FAQ, video, article) the plugin adds. * **Works with your SEO plugin** — The meta description and focus keyword (plus secondary keywords where the plugin takes several) are written automatically to Yoast SEO, Rank Math, All in One SEO, SEOPress, or The SEO Framework, in the place each plugin actually reads them. Your SEO plugin keeps control of the title template, canonical URL and social tags. No SEO plugin? The meta description is still added to the page. * **WordPress excerpt filled in** — Each article's excerpt is its meta description, so blog listings show a proper summary instead of a cut-off first paragraph. An excerpt you write yourself is never overwritten. * **Rich-result structured data** — Adds VideoObject schema for embedded YouTube videos and FAQ schema — merged into your SEO plugin's own schema where it has one — so your posts are eligible for video and FAQ rich results in Google. * **Categories & tags** — Syncs your WordPress categories and auto-creates tags from each blog's keywords. * **Clean, portable HTML** — Proper heading structure, responsive tables, clickable in-text citations with a linked references list, and `rel="noopener noreferrer"` on external links. * **Built-in activity log** — A Logs tab records every publish and image import. Filter by type, search, export to CSV, or clear it out. * **Self-healing images** — Images import in parallel in the background, and a daily check automatically re-imports anything an interrupted job missed. * **Secure by design** — Your connection credentials are encrypted, and disconnecting or removing the plugin fully revokes access, so no stale connections are left behind. = How It Works = 1. Install and activate the plugin. 2. In another browser tab, log in to your DraftSEO.ai account. 3. Go to **DraftSEO → Settings** and click **Connect with DraftSEO.ai** — the connection completes automatically over OAuth (no API key to copy). 4. Generate a blog in DraftSEO.ai and click **Publish to WordPress**, or switch on Auto-publish. **Requires an active DraftSEO.ai account.** Visit [draftseo.ai](https://draftseo.ai) to sign up. == Installation == = From your WordPress dashboard = 1. Go to **Plugins → Add New** and search for "DraftSEO.ai". 2. Click **Install Now**, then **Activate**. = Manual upload = 1. Download the plugin ZIP. 2. Go to **Plugins → Add New → Upload Plugin**, choose the ZIP, and click **Install Now**. 3. Click **Activate**. = Connect = In another browser tab, log in to your DraftSEO.ai account. Then go to **DraftSEO → Settings** and click **Connect with DraftSEO.ai**. The connection completes automatically — there's no API key to copy. == Frequently Asked Questions == **Do I need a DraftSEO.ai account?** Yes — the plugin publishes content from your DraftSEO.ai account, so you'll need an active one. Sign up at [draftseo.ai](https://draftseo.ai). **How do I connect my site?** Log in to your DraftSEO.ai account in one tab, then click "Connect with DraftSEO.ai" on the plugin's settings page. The connection is made automatically over OAuth — there's no API key to copy or paste. **Where do my images go?** Every image is downloaded to your own WordPress Media Library and served from your site, so you keep full ownership with no ongoing dependency on DraftSEO.ai. There's no limit on the number of images per post. **What if an image fails to import?** Publishing never waits on images — the post goes live immediately and images import in the background. If a download is interrupted, a daily background check re-imports the missing images automatically, so there's nothing for you to do. **Which SEO plugins are supported?** Yoast SEO, Rank Math, All in One SEO, SEOPress, and The SEO Framework. The meta description and focus keyword are written to whichever you have active (The SEO Framework has no keyword field, so it gets the description). If you add or switch SEO plugins later, the new one is filled in for your existing DraftSEO.ai articles automatically — only where its fields are still empty. **Does DraftSEO.ai change my SEO title, canonical URL or social settings?** No. Your SEO plugin already builds those from the post, and it keeps doing so. (Versions before 1.7.0 set a canonical URL; updating removes the ones they set, so your articles use their real address and appear in your XML sitemap.) **My theme shows the article title twice, or not at all. What can I change?** Go to **DraftSEO → Settings → Article title heading**. Automatic adds the title as a heading only when your theme shows none; choose Always or Never to decide yourself. It applies to all your DraftSEO articles at once. **I use LiteSpeed Cache. Are my DraftSEO images optimised?** Yes — images from articles DraftSEO.ai writes since 29 October 2026 arrive already optimised as WebP, around ten times lighter, so there is nothing left for LiteSpeed Cache to convert. Every image is still a normal Media Library item with all its sizes, so LiteSpeed Cache handles it like any upload. Images in older articles were PNG; to serve WebP versions of those, turn on **LiteSpeed Cache → Image Optimization** (including the automatic request cron) and **Image WebP Replacement**. **Can I publish to more than one site?** Yes. Connect as many WordPress sites as you like to your DraftSEO.ai account — each just needs the plugin installed and connected. **Does it work with custom post types?** Not yet — the plugin publishes to standard WordPress posts and pages. **Where can I get help?** Visit [draftseo.ai/contact](https://draftseo.ai/contact). == Screenshots == 1. The DraftSEO.ai connection screen in the WordPress admin. == Changelog == = 1.7.2 = Articles now publish even when your web server cannot receive large requests. **Fixes** * On some servers every article failed with "Missing parameter(s): title, content", because the server threw large requests away before WordPress could read them — the plugin now downloads the article from DraftSEO.ai instead, and it publishes as usual. = 1.7.1 = Lighter images with names that describe them, and your Media Library now says who added them. **Improvements** * Images DraftSEO.ai adds to your Media Library show "Uploaded by: DraftSEO.ai" instead of "(no author)". Images you have assigned to someone yourself keep their name. * Images in new articles arrive already optimised as WebP, around ten times lighter, so pages load faster and use less of your hosting storage — no image-optimisation plugin needed. * Their file names describe what the image shows, and a regenerated image gets the next version number — for example "woman-meditating-by-a-window-v1.webp", then "…-v2.webp". * Both apply to articles DraftSEO.ai writes from 29 October 2026, whichever plugin version you run. Images in older articles stay exactly as they are. = 1.7.0 = Full support for the five most popular SEO plugins — and your DraftSEO.ai articles back in your XML sitemap. **New features** * The SEO Framework is supported — it receives the meta description. * SEOPress receives the focus keyword in its "Target keywords" box. * Secondary keywords go to Rank Math, All in One SEO and SEOPress when DraftSEO.ai has them for an article. * The WordPress excerpt is the article's meta description, so themes that show a summary in your blog list show a real one instead of a cut-off first paragraph. Existing articles with an empty excerpt are filled in; an excerpt you wrote yourself is never changed. * Add or switch SEO plugins later and the new one is filled in for every existing DraftSEO.ai article — only fields that are still empty. * No SEO plugin? Your articles still get their meta description. It is added only when nothing else on the page prints one. * FAQ and video structured data now join your SEO plugin's own schema (Yoast SEO, Rank Math, All in One SEO, The SEO Framework) instead of sitting in separate blocks, and are skipped when your SEO plugin already describes the same FAQ or video. * If your theme shows no H1 heading on an article, the article title is added as one. The plugin checks the finished page, so themes that already show the title are left exactly as they are. * Images get short, descriptive file names (for example "oak-herringbone-floor-satin-finish.png") instead of random ones, as Google recommends. * The smaller image sizes your theme shows are saved as WebP when your server supports it — usually several times lighter than PNG. The original image is kept exactly as it was, on every WordPress version. * A Settings tab. Choose how the article title heading is handled (Automatic, Always or Never), and switch FAQ, video and article structured data on or off. * Article structured data (BlogPosting) for your articles when your SEO plugin does not add its own. Password-protected articles are never described to search engines. * A Relinking tab. When DraftSEO.ai reconnects your articles — for example after a backup restore or a reinstall — and finds a post at an article's address that it cannot confirm as its own, that post now waits in DraftSEO → Relinking for you to approve or reject. Nothing on your site is taken over without your say. **Improvements** * Security hardening across the plugin, following the latest WordPress security guidance: * Every request from DraftSEO.ai is held to stricter rules — articles can only be created as posts, pages or products, with standard publishing statuses, and under an author who is allowed to write them. * The plugin's internal article data is protected and no longer appears in the editor's Custom Fields panel. * Images are only downloaded from DraftSEO.ai's own image storage and your own site, over secure connections, in standard image formats, and within sensible size limits. * Your connection key is stored with modern authenticated encryption, connect links work only once, and the plugin only ever talks to DraftSEO.ai over HTTPS. * FAQ and video structured data are checked again before they are added to your pages, and password-protected articles keep their FAQ and description private. * Answers sent to DraftSEO.ai are marked so page caches never store them, and server folder names are left out of the plugin's log. * Plugin log lines are only copied to the PHP error log when you have WordPress debug logging switched on. * The DraftSEO.ai menu is shown only to administrators — the people who can use it. * Log export opens correctly in Excel (accented letters included), exports exactly the entries you filtered, and is safe to open in any spreadsheet. * The plugin's admin screens can now be fully translated, and the Logs filters work with screen readers. * Special characters such as "&" and "’" now appear correctly in article structured data. * FAQ and video structured data and the article styles now also apply to articles published as pages. * FAQ and video structured data are written so that no text inside them can break the page's code. * When the plugin is switched off, disconnected or deleted, DraftSEO.ai is told which of the three it was, which WordPress user did it and how (the Plugins screen, WP-CLI, a site-management tool …), so your DraftSEO.ai account shows what really happened. The result is also written to the plugin's log. * DraftSEO.ai support can read this plugin's own log of warnings and errors, to find and fix problems without asking you to export it. See "External Services" below. * Tested with WordPress 7.1 and PHP 8.5. The bundled Action Scheduler background-job library is updated to 3.9.3, which removes the deprecation notices it logged on PHP 8.4 and newer. WordPress 6.2 is still the minimum. **Fixes** * Articles published with images since version 1.5.0 told search engines their address was a temporary "?p=123" link instead of their real one, and Yoast SEO, Rank Math and SEOPress left them out of your XML sitemap because of it. The plugin no longer sets a canonical URL at all — your SEO plugin uses the article's real address — and the old values are removed from your existing articles automatically after you update. Canonical URLs you set yourself are kept. * All in One SEO received nothing: it keeps its data in its own database table, which earlier versions never wrote to. It now gets the meta description and focus keyphrase, and existing articles are filled in automatically. * Image titles and alt text with accented letters, curly quotes or dashes were saved garbled in your Media Library — "egetru00e6" instead of "egetræ" — and so was the text inside FAQ and video structured data. New articles are saved correctly, and the images and structured data of your existing DraftSEO.ai articles are repaired automatically, once, after you update. Only text that is unmistakably damaged is changed — ordinary words are never touched. * A backslash in an article's title or text was dropped when the article was saved. * On PHP 8, only one image per batch was downloaded in parallel — the rest fell back to slower one-at-a-time downloads and left temporary files behind. * Pressing Disconnect on the plugin's page was reported to DraftSEO.ai as "plugin deactivated", so your DraftSEO.ai account could tell you the connection would reopen by itself. It is now reported as a disconnect. If DraftSEO.ai cannot be reached at that moment, the plugin now tells you instead of saying everything worked. * On a multisite network, deactivating or deleting the plugin network-wide told DraftSEO.ai only about the main site. Every site in the network is now included, and every site's plugin data is cleaned up. * In rare cases a very long article containing a video could be saved with an empty body. The article text is now always kept. * A stray closing tag in an article's HTML could cut off the rest of the article when it was converted to editor blocks. Such an article is now kept whole. * The same article could occasionally be published twice when your site was slow or another plugin failed during publishing. * Articles with a custom or preserved publish date could be stored in the wrong timezone and end up "Scheduled" instead of published. * Switching the plugin off and on again stopped the daily image check and the log clean-up until the next update. * "Clear all logs" could fail on some hosts while saying it had worked, and log entries with unusual characters could be lost. The Logs page also showed the wrong retention period (it is 60 days). * Image imports: duplicate images on sites with a persistent object cache, a repair starting while an import was still running, and articles with many images on older connections are all handled correctly now. A scheduled article is no longer published early when its images finish importing. * Background tasks started from the WordPress admin run again with the bundled Action Scheduler. * Deleting the plugin left a few settings behind, and very large multisite networks were not cleaned up completely. = 1.6.3 = Clearer help when your web host stops this site from finishing the connection to DraftSEO.ai. * Improved: If your site cannot reach DraftSEO.ai while connecting, the error now says what usually causes it — a web host that blocks outgoing connections from WordPress — and what to ask your host for, instead of a raw technical error. On AlterVista, that means switching on server-to-server connections. The technical error is still shown underneath, for your host's support team. = 1.6.2 = Fixes article formatting on ClassicPress, and adds ClassicPress as a platform you can pick in DraftSEO.ai. * Fixed: On ClassicPress, articles were published with block-editor markup in them — the kind of hidden comments WordPress 5+ uses — even though ClassicPress has no block editor to read them. They showed up as raw text if you opened the Text tab. Articles now arrive as plain HTML, exactly as the classic editor expects. Existing articles are unaffected; republish one to clean it up. * Fixed: DraftSEO.ai no longer appears in ClassicPress’s list of plugins that "use block-related functions and may have issues". It never had a problem — it was only being counted because of the check above. * Note: ClassicPress 2.0 or newer is required. ClassicPress 1.x reports itself as WordPress 4.9, which this plugin cannot install on. = 1.6.1 = DraftSEO.ai can now link your articles to your WooCommerce product category pages, not only to your posts and products. * New: On WooCommerce stores, DraftSEO.ai can now see your product categories — their names, descriptions and SEO titles — so an article about trail running can link to your "Trail Running Shoes" category page. Only categories that contain products are shared, and nothing on your site is changed. = 1.6.0 = Articles now arrive as separate, editable blocks instead of one big lump — in the WordPress editor and in Elementor. * New: Articles are published as normal WordPress blocks, so every paragraph, heading, list, image and quote can be moved or edited on its own instead of sitting inside one "Classic" block. Sites using the Classic Editor are unaffected and still receive plain HTML. * New: Opening an article with "Edit with Elementor" now builds a proper layout — a container per section, with separate widgets for each heading, paragraph, list, image, video and table — instead of dropping the whole article into a single Text Editor widget. Nothing is stored unless you save, and your live page is untouched until then. * New: Images are linked to their Media Library entry, so WordPress can serve correctly sized versions and lazy-load them. This speeds up article pages for every site, whichever editor you use. * Fixed: If you design an article in Elementor, DraftSEO no longer overwrites your layout or deletes images it still uses when the article is republished. Only the title and SEO fields are updated. * Fixed: The daily image check and the repair job now also look inside Elementor layouts, so an article can no longer be marked healthy while still loading images from DraftSEO. = 1.5.3 = No more false "Out of sync" warnings — the plugin now checks with DraftSEO.ai before telling you the connection is broken. * Fixed: Refreshing the settings page straight after connecting could switch on an "Out of sync" warning even though the connection was working and articles were still publishing. The connect link is now cleared from the address bar as soon as it is used, so a refresh can no longer trigger it. * Fixed: Once that warning appeared, nothing ever removed it. The plugin now asks DraftSEO.ai whether the connection really is broken each time you open the Connection tab, and removes the warning when it is not. It also removes it automatically the next time DraftSEO.ai publishes to your site. * Improved: After you deactivate and reactivate the plugin, it checks the connection again, so the settings page shows the real state and offers a one-click Reconnect instead of claiming to be connected. * Improved: When a reconnect really is needed, the Connection tab now has a "Reconnect with DraftSEO.ai" button and a "Check again" button. You no longer need to delete your site from DraftSEO.ai first — your articles and settings there are kept. * Improved: Connection checks are recorded under a new "Connection" type in the Logs tab. = 1.5.2 = Articles that were still being prepared can no longer be treated as if they were already live on your site. * Fixed: When DraftSEO had to re-send an article after a slow reply, your site told it "I already have this one" — but not whether that article was actually published yet or still waiting for its images. DraftSEO now gets the article's real status, so an article that is still a draft is never listed or shared as a published page. = 1.5.1 = Articles that got stuck as a draft now publish, and when something on your site does stop a publish, DraftSEO can finally tell you what it was. * Fixed: If the very last step of publishing failed, the article stayed an invisible draft and pressing "Republish" in DraftSEO could never rescue it — it re-sent the article but was not allowed to publish it. Republishing now finishes the job. It will only ever move a draft forward; an article that is already live is never taken down or changed. * Fixed: On hosting that cannot complete the normal publish step, the article is now published a second way that far fewer plugins can interrupt, instead of giving up after three tries. Its images are then brought over separately, so a slow host no longer costs you the article. * Fixed: An article that had actually published could be reported back to DraftSEO as a failure, because the report was based on running out of attempts rather than on looking at the article. It now checks. * Improved: When your site does stop a publish, the reason is now sent to DraftSEO — including PHP running out of memory or time, and how much memory your host allows. Previously every one of these failures arrived with no explanation at all and needed someone to read your server's error log. * Improved: Publish and image responses now report your PHP memory limit, so support can give you an exact number to ask your host for. = 1.5.0 = Publishing now works on low-memory hosting. Articles are built quietly as a draft, images are brought over one at a time, and the article goes live only once it is complete. * Fixed: On hosting with a low PHP memory limit, publishing an article could fail with "There has been a critical error on this website" — sometimes succeeding one day and failing the next. Publishing now uses far less memory at every step, so it completes on hosting where it previously ran out. * Changed: An article with images is now created as a draft, its images are brought into your Media Library one at a time, and only then is it switched to Published. This means the article is never visible on your site in a half-finished state, and it never briefly shows images loaded from DraftSEO's servers instead of your own. * Changed: Each image is now handled by its own background task instead of all of them sharing one. If your server is short on memory, the remaining images are picked up automatically by the daily check rather than the task being cut off. * Added: An image that fails is automatically retried once before it is reported as failed. * Added: A safety check runs every few minutes. If an image task is interrupted — for example your server runs out of memory partway through — it picks the work back up automatically. If images are still not finished after 30 minutes, your article is published anyway with the images that did arrive, and the rest are added afterwards. Your article is never left waiting. * Fixed: Turning the plugin off did not actually cancel its background tasks, so image and repair jobs could still run after deactivation. They are now properly cancelled. * Improved: Publishing no longer loads a large WordPress admin file it never needed, and it now asks WordPress for extra memory in the standard way — which your site can adjust. * Note: If you have chosen to publish as a draft or pending review, nothing changes — your articles are created with the status you chose, exactly as before. = 1.4.1 = Articles you move to the Bin are no longer reported to DraftSEO as missing. * Fixed: When a DraftSEO article was in your site's Bin, DraftSEO could not see it at all — so it reported the article as no longer on your site, and "Reconnect articles" could not resolve it. Posts in the Bin are now reported along with their status, so DraftSEO tells you the article is in the Bin and simply needs restoring. = 1.4.0 = Removing and reinstalling the plugin no longer breaks the link to your existing DraftSEO articles, and articles that lost that link can now be reconnected. * Fixed: Deleting the plugin used to erase the markers that identify which posts DraftSEO published, while leaving the posts themselves in place. After reinstalling, none of your existing articles could be updated from DraftSEO again — every republish was refused. Those markers are now kept, so a reinstall picks up exactly where you left off. * Added: A new **Re-sync** tab in the plugin explains what breaks the link between your posts and DraftSEO, and takes you straight to the right place to fix it. * Added: A "Reconnect articles" button in DraftSEO re-links articles whose connection was lost — after a database restore, a site migration, or an older reinstall. It re-links a post only when the article's exact web address still matches, and only ever one post per article — if two could match, or none does, it leaves them alone and tells you. Re-linking itself changes nothing on the post; it records which article the post belongs to, which is also what allows you to update that post from DraftSEO afterwards. * Improved: If you republish an article whose WordPress post was deleted or renumbered, DraftSEO now finds the current post automatically instead of failing. When it genuinely cannot be found, you are told why and what to do, instead of getting a generic error. * Improved: The plugin still refuses to overwrite any post it did not create — that protection is unchanged. = 1.3.10 = Articles are no longer reported as failed when their images actually imported fine, and you now get told when only some of the images made it. * Fixed: If another plugin on your site raised an error while your article was being saved, DraftSEO reported that every image had failed — even when all of them had imported correctly and the article was perfect. Your dashboard then asked you to republish for nothing. DraftSEO now reports what actually happened. * Fixed: One misbehaving plugin could stop the remaining images on a post from importing at all. Each image is now handled on its own, so a problem with one image no longer costs you the others. * Fixed: The same problem could make the automatic daily repair give up on a post permanently, leaving its images hosted outside your site forever. Repairs now check the post itself before deciding they failed. * Added: When only some of an article's images import, DraftSEO now tells you which ones are still outstanding instead of reporting a silent success. * Improved: When an error does come from another plugin on your site, DraftSEO now records which file it came from, so support can point you straight at the cause. = 1.3.9 = DraftSEO can now see which plugin version each of your sites is running, so support answers are faster and you get a reminder when a site falls behind. * Improved: Your site now reports its DraftSEO plugin version, WordPress version and PHP version every time it publishes an article or finishes importing images. Previously that was only sent when you pressed "Test connection", so when something went wrong on one site we could not tell which version produced it without asking you. * Improved: If one of your sites is running an old plugin version, DraftSEO now shows a reminder inside your dashboard with a direct link to update it. = 1.3.8 = Images now start importing the moment an article is published, even on a site with no visitors. * Fixed: Image importing no longer waits for someone to visit your site. Until now the import was queued and only started when your site next received a visit, so on a quiet site a new article could sit for hours with its images still hosted by DraftSEO instead of in your own media library. DraftSEO now starts the import itself, right after publishing. * Improved: If an import ever does stall, DraftSEO retries starting it every hour instead of giving up. = 1.3.7 = DraftSEO can now see your custom pages — services, projects, team members and more — so its articles link to them properly. * Improved: DraftSEO now recognises every public page type on your site, not just standard posts, pages and WooCommerce products. If your theme adds sections like Services, Projects, Team or Testimonials, those pages are now included when DraftSEO looks for places to link to. * Improved: Those pages now carry their real titles and SEO descriptions instead of a guess made from the web address, so links to them are far more relevant. = 1.3.6 = Image-import reports back to DraftSEO now say which post they are about. * Improved: When images finish importing (or fail to), the plugin now tells DraftSEO which post the result belongs to, and its address. Previously it sent only the numbers, so a failure showed up in your DraftSEO publishing history with no way to tell which article to go and look at. * Improved: DraftSEO can now fill in a missing post address for older publishes automatically when an image import finishes, instead of leaving the entry incomplete. = 1.3.5 = Housekeeping release: the plugin now leaves the rest of your site alone, does less work on every page load, and can no longer get stuck repairing the same post forever. * Fixed: The daily image check now looks only at posts DraftSEO published. It previously examined every post, page and product on your site and left a small DraftSEO marker on each one. Nothing was damaged, but it was untidy and slower than it needed to be — the check is now scoped to our own posts and runs faster as a result. * Fixed: A post whose images could not be fully tidied up could be re-checked every single day, forever. It now gives up cleanly after a few attempts, exactly as intended. * Fixed: When a background image job failed, the plugin assumed WordPress would automatically try it again. It does not. Failures are now either retried deliberately or reported and closed, so a post can no longer be left silently half-finished, and DraftSEO no longer shows a publish stuck at "processing". * Fixed: If DraftSEO could not be reached at the moment an image import finished, the result was lost. The plugin now reports it through a second, longer-lived channel instead. * Fixed: A successful image import could occasionally be reported to DraftSEO as a failure if the network hiccuped at the wrong moment. * Improved: Background image jobs now run with a sensible time limit instead of no limit at all. A very large post stops cleanly and finishes on the next daily pass rather than risking a stalled job that repeats every few minutes. * Improved: Removed a setting that tried to control WordPress's background-task scheduler. It used a name that scheduler does not recognise, so it never did anything — and had it worked it would have changed behaviour for other plugins on your site, including WooCommerce. Those settings belong to you, not to us. * Improved: Two database lookups have been removed from every page load on your site. = 1.3.4 = Video rich-result data is now complete, fixing the "Missing field 'name' / 'uploadDate'" errors reported in Google Search Console. * Fixed: Posts containing a YouTube video now publish complete video structured data, including the video's title, upload date, description, and length. Previously only the thumbnail and player address were included, which Search Console flagged as a critical error and which prevented the post from being eligible for video rich results. * Improved: If video details are ever unavailable, the plugin now leaves the video markup out entirely instead of publishing an incomplete version — no markup is better than markup Google reports as broken. * Improved: Republishing an older post from DraftSEO now upgrades its video data in place, so existing posts are corrected as you update them. = 1.3.3 = Failed image imports now retry automatically over several days and report a clear reason instead of a generic error. * Improved: When images cannot be imported (usually a temporary connection problem between your host and our image server), the plugin now retries a few times across the next days before giving up, instead of abandoning the post after one attempt. Republishing from DraftSEO still resets this immediately. * Improved: The plugin now tells DraftSEO exactly why an image import failed (for example an SSL, DNS, or firewall problem), so the cause is visible in your DraftSEO publishing history without digging through server logs. * Fixed: Manually published and republished posts now report image-import completion back to DraftSEO reliably, so a successful background repair no longer leaves the job showing as failed. = 1.3.2 = Republishing now respects your featured-image choice, preventing a duplicated image at the top of updated posts. * Fixed: Republishing a post now honours your "Set featured image" preference. Previously an update always set a featured image even when you had turned that option off, which could show the same image twice at the top of the post. = 1.3.1 = Refreshed light-themed admin design, faster re-publishing, more efficient syncing, and gentler default image importing. * Improved: Re-publishing a post when only its SEO details changed is now faster — unchanged content and images are no longer reprocessed. * Improved: Syncing large sites with DraftSEO.ai transfers less data. * Improved: More reliable image handling in post content, and oversized requests now return a clear message instead of failing silently. * Improved: Image importing uses gentler, safer defaults so it runs smoothly even on limited shared hosting, and activity logs are now kept for 60 days. * Improved: The settings screen now uses a clean, light theme on every site for a consistent look, instead of following the operating system's dark appearance. * Improved: Modernised the settings screen — matched, rounded Connect/Disconnect buttons with smooth hover and keyboard-focus states, an underline tab indicator, a subtle DraftSEO.ai brand accent on the card, and a tidier single-column layout (with reduced-motion support). * Improved: The sidebar menu icon now matches the DraftSEO.ai brand mark. * Improved: Clearer, less repetitive wording on the connection screen, and consistent "DraftSEO.ai" branding throughout. = 1.3.0 = Security and reliability release: disconnecting now fully revokes access, salt rotations show a clear "reconnect" message, the connection flow is locked to the official DraftSEO address, publishing reports real success or failure, and the admin screens have a refreshed design. * Security: Disconnecting your site (from either DraftSEO or the plugin's Disconnect button) now fully revokes the stored connection key. Previously the key the plugin actually used for authentication was left in place, so the site could still be published to after it showed as disconnected. * Security: The "Connect with DraftSEO.ai" flow now only accepts the official DraftSEO address, so a tampered connection link can no longer point your site's connection at another server. * Security: Image and callback URLs are now validated to prevent server-side request forgery, and the completion callback can only be sent to the DraftSEO platform. * Improved: If your site's WordPress security keys (salts) are rotated — by a security plugin, a host migration, or cloning to staging — the plugin now detects that its saved key can no longer be read and shows a clear "please reconnect" message instead of a generic "invalid key" error. Your settings are kept so you know exactly what happened. * Fixed: Publishing now reports a real failure if WordPress refuses to create the post, instead of occasionally reporting success for a post that was never created. * Fixed: Sync now also recognises articles published as Pages or products, so it no longer republishes them as duplicates. * Fixed: Background image, repair, and health jobs are now crash-hardened — a single bad image URL can no longer silently kill the job and leave "images importing…" stuck forever. * Improved: Faster sync on large sites (fewer database round-trips), tidier post URLs (native WordPress slugs), and accurate author names in the activity log. * New: The plugin now shows an "update available" note in its settings when a newer version is recommended. * New: Refreshed admin design that follows your WordPress admin colour scheme, with a clearer connection status card and a modernised Logs table. = 1.2.7 = WordPress 7.0 compatibility, plus automatic alt text from your images. * Improved: Tested and confirmed compatible with WordPress 7.0 (still works on WordPress 6.2 and newer). * Improved: Translations now load on WordPress's `init` hook, removing the "translation loaded too early" debug notice that could appear on WordPress 6.7 and newer. * New: When a DraftSEO image has no alt text of its own, the plugin now reads alt text embedded in the image file (IPTC/XMP metadata) on WordPress 7.0 and uses it automatically — better accessibility and SEO with no extra work. * New: On WordPress 7.0, the plugin can record relevant WordPress core warnings that happen during its own operations in the Logs tab, even when debug mode is turned off — making support issues easier to diagnose. = 1.2.6 = Reliability fix: publishing no longer fails with HTTP 500 when another plugin on your WordPress site has a bug in its HTTP calls. * Fixed: Publishing from DraftSEO could intermittently fail with HTTP 500 on sites where a third-party plugin (caching, SEO, analytics, etc.) made a malformed HTTP request during the WordPress `save_post` hook. The DraftSEO plugin now catches these exceptions and returns a clear error message instead of crashing the entire REST request. This was the leading cause of intermittent publish failures on affected sites. * Fixed: On sites using the legacy image import path (no callback URL), the featured image import could crash with a PHP fatal error if the image URL resolved to an empty string. The plugin now skips the import safely and logs a warning instead of crashing. * Fixed: Publishing a blog with no images could hold the WordPress REST connection open for up to 30 seconds while waiting for the DraftSEO completion callback. The callback is now sent as a non-blocking fire-and-forget request so publish completes immediately. = 1.2.5 = Hotfix: WordPress auto-publish no longer crashes with HTTP 500 on sites that have integer-keyed cookies in the browser. * Fixed: On WordPress 6.2–6.6.x, any browser cookie with a numeric name (e.g. set by certain caching plugins or analytics tools) caused Action Scheduler's loopback dispatch to throw an uncaught `WpOrg\Requests\Exception\InvalidArgument`, which propagated as a PHP fatal error and returned HTTP 500 to DraftSEO, failing the entire publish. The bundled `WP_Async_Request` no longer forwards `$_COOKIE` to the internal loopback ping — authentication for that request uses a nonce, not cookies, so the change is safe with no functional impact. = 1.2.4 = Fixes stuck "images importing…" jobs, adds a Logs admin tab with CSV export and DB-backed structured logging, and improves error visibility across all image import paths. * Fixed: Blog posts published before April 5 2025 could show "images importing…" in the DraftSEO UI indefinitely if the original callback failed (e.g. the 24-hour HMAC window expired before Action Scheduler ran). Running Sync now automatically detects and resolves these stuck jobs when WordPress confirms the post exists. * Fixed: The repair scan no longer silently discards its completion status. When it finishes importing all images for a post it now notifies DraftSEO via a new long-lived API-key endpoint, closing the loop on any syndication job whose HMAC callback URL had already expired. * New: Posts now store the DraftSEO syndication job ID (draftseo_syndication_job_id) in post meta at publish time. This enables the repair scan to notify DraftSEO without the original (expiring) callback URL. * New: Logs tab in the plugin settings page. Browse, filter by level/type, search, export to CSV, copy to clipboard, or clear all entries. Logs are kept for 30 days and cleaned up automatically by Action Scheduler. * New: Structured DB logger (wp_draftseo_logs table with level, type, message, post_id columns). All image import paths — direct, async, background, repair scan, health check, and callback delivery — now write structured log entries visible in the Logs tab in addition to WordPress debug.log. * Improved: `process_images_background` (hybrid strategy, 6+ images) now logs per-URL download failures and a completion summary — previously completely silent. * Improved: `import_images_direct`, `process_images_with_callback`, `import_from_temp`, `sequential_download_images`, `import_images_async`, and `fire_callback` now each emit structured log entries with post ID, URL, and error detail on failure. = 1.2.3 = Critical fix: background image health check and repair scan were silently never scheduled due to Action Scheduler initialisation timing. * Fixed: The daily image health check was never registered and the self-healing repair scan never ran after plugin install. Both background jobs silently failed to schedule because they were called before Action Scheduler's data store was ready. Both are now hooked to the correct 'action_scheduler_init' event, which fires only when the data store is fully initialised and it is safe to call Action Scheduler APIs. = 1.2.2 = Bug fixes, new SEO plugin support, and automatic sync reconciliation. * Fixed: Publishing the same blog twice — for example after a network timeout or a retry — no longer creates a duplicate WordPress post. The second request returns the existing post immediately. * Fixed: The SEO title (the per-post SERP title override, separate from the post title) was never written to the active SEO plugin. When DraftSEO sends a `seoTitle`, it is now written to Yoast (`_yoast_wpseo_title`), Rank Math (`rank_math_title`), All in One SEO (`_aioseo_title`), and SEOPress (`_seopress_titles_title`). * Fixed: Images imported with a `caption` field from DraftSEO now have their caption visible in the WordPress Media Library (Edit Media → Caption), in the block editor image block, and in default `[caption]` / `
` output. Previously the caption was silently dropped. * Fixed: The self-healing image repair scan was silently skipped when a user updated the plugin by deactivating and reactivating it — the most common manual update flow. The fix ensures the repair scan fires correctly after every update, not just when using WordPress's automatic update mechanism. * Fixed: A logic error in the duplicate-job guard could allow the repair scan to be queued more than once simultaneously. The guard now correctly detects any pending repair job regardless of its internal batch number. * New: SEOPress is now a fully supported SEO plugin. The meta description (`_seopress_titles_desc`), SEO title (`_seopress_titles_title`), and canonical URL (`_seopress_robots_canonical`) are written at publish time. * New: Posts containing YouTube videos now have VideoObject structured data (JSON-LD) added to their page head automatically. This makes the videos eligible for video-rich results in Google Search. * New: When you click Sync for a WordPress connection, DraftSEO now automatically restores the WordPress post link for any blog whose mapping was lost (for example after a database restore). Affected blogs immediately show the correct "Published to WordPress" card in their detail view. * New: When you click Sync, DraftSEO also automatically recovers any published posts that exist on WordPress but are missing from your DraftSEO account — for example after a data restore or account transfer. All affected blogs immediately show as Published on the Posts page. = 1.2.1 = Internal code reorganisation. No behaviour changes. * Improved: Plugin PHP files split into smaller, single-responsibility classes for easier maintenance and future development. = 1.2.0 = Image reliability fixes, automatic self-repair for all previously affected posts, and continuous background health monitoring. * Fixed: Images were sometimes missing from the WordPress Media Library after publishing from DraftSEO. This happened silently on certain hosting environments due to differences in how the server handles external downloads. The plugin now tries an additional download method before giving up, significantly increasing import success rates across all hosting environments. * New: After updating, the plugin automatically scans your entire site in the background for any posts where images were never properly imported from DraftSEO. Affected posts are silently repaired without any action needed from you. You can monitor progress under Tools > Scheduled Actions in your WordPress admin. * New: A lightweight check now runs automatically every 24 hours. If any post is found with images that didn't fully import — for example because a server timeout interrupted the process overnight — the plugin queues a repair automatically. No monitoring required: healthy sites see no activity and affected posts are fixed without manual intervention. * Improved: The daily check permanently skips posts that have already been fully verified, so it stays fast regardless of how many posts are on your site. On a fully audited site the check completes in a fraction of a second. Republishing a post automatically resets it so new images are always verified. * Improved: Image imports now run in controlled parallel batches, keeping resource usage predictable on any hosting environment. Designed and tested for sites publishing large numbers of blogs, each with many images. = 1.1.6 = Faster republishing — only new or changed images are re-downloaded. * Improved: When republishing a post, images that were already imported in a previous publish are no longer downloaded again. Only new or replaced images are fetched. For a typical blog, republishing with no image changes now skips all image downloads entirely. = 1.1.5 = Reliable image import confirmation for all publish paths. * Fixed: Republishing a post was blocked with "not in completed status" when a previous publish had images still importing in the background. Republishing now self-heals stuck jobs and always proceeds. * Fixed: Manual publish and Republish now use the same async callback path as Auto-publish — DraftSEO is notified when all images finish importing instead of assuming completion immediately. * Improved: The background image callback is now confirmed (blocking HTTP request) so Action Scheduler can automatically retry delivery if DraftSEO's server is temporarily unreachable. * Improved: Republish is no longer blocked while images are still uploading — updating the post content always proceeds immediately, and image import completion is tracked in the background. = 1.1.4 = Cosmetic and connectivity improvements. * Improved: Settings page now displays "DraftSEO.ai" with the installed plugin version shown next to the heading. * Improved: Connection status now shows a clear "Connection Issue" state (instead of "Connected") when authentication with DraftSEO.ai fails — includes step-by-step instructions to reconnect. * Improved: "Go to DraftSEO.ai" button on the connected settings page is cleaner — icon removed, label updated. = 1.1.3 = Reliability improvements, faster image loading, and cleaner background processing. * Fixed: Images on published posts were sometimes not appearing on low-traffic websites — they were queued to download in the background but the background job wasn't starting until the next page visit. They now start immediately regardless of site traffic. * Fixed: Switching the plugin off while a publish was in progress could leave background tasks running after deactivation. The plugin now cleanly stops all background jobs when it is deactivated. * Fixed: Removing the plugin (uninstall) now properly disconnects your site from DraftSEO.ai — the connection is closed on the DraftSEO side before all plugin data is removed. * Fixed: Plugin text was not translating correctly on WordPress sites running in a language other than English. Translation files now load properly. * Improved: Background image jobs now use Action Scheduler instead of WP Cron. Action Scheduler runs as a true background process without requiring a page visit, retries failed jobs automatically, and shows pending and completed jobs in the WordPress admin at Tools > Scheduled Actions. * Improved: Images in background jobs are now downloaded in parallel before being imported. For a blog with 20 images this reduces total download time from roughly 60–100 seconds (sequential) to 5–15 seconds (parallel). * Fixed: Republishing a post was creating duplicate images in the Media Library for any image that had not changed. Only new or replaced images are now downloaded and imported — unchanged images are reused from the existing Media Library entry. = 1.1.2 = Security update: fixes API token authentication on WordPress sites where the Application Passwords feature or a security plugin was blocking server-to-server requests from DraftSEO.ai before they could be validated. = 1.1.0 = Automatic cleanup when republishing with a new image. * When you republish a post with a new AI-generated image, the new image is swapped in automatically and the previous image is removed from your WordPress Media Library — keeps your media folder clean and saves storage space. = 1.0.5 = YouTube video embeds now work on WordPress. * Fixed YouTube videos not appearing on published WordPress posts — videos are now properly converted to native WordPress embed blocks before publishing, so they show up as responsive YouTube players on your site = 1.0.4 = Content formatting and image fixes. * Fixed headings appearing as raw text after images instead of being properly formatted * Removed unwanted image captions — image descriptions were showing as visible text below every image. They are now used for accessibility only and no longer display on the page = 1.0.3 = Content formatting fixes. * Fixed headings sometimes appearing as plain text instead of proper headings * Fixed citation links being malformed in published posts = 1.0.2 = Citation links, external link handling, and FAQ structured data for rich results. * In-text citations — `[1]`, `[2]` markers now render as clickable superscript links that jump to the matching reference in the References section * References section — Converted to a numbered list with anchor IDs (`#ref-1`, `#ref-2`) for smooth in-page navigation * External links — All external links now open in a new tab with `rel="noopener noreferrer"` * FAQ structured data — FAQ question-answer pairs from blog content are injected as JSON-LD into the post `` for Google FAQ rich results * Theme-consistent styling — CSS is injected for citations, references, and tables so they display correctly across all WordPress themes * Active sites filter — The WordPress site dropdown now shows only connected, active sites = 1.0.1 = Hotfix for content rendering in published posts. * Fixed: YouTube embeds were being stripped during publishing — they now render as embedded players on your site * Fixed: Data tables were displaying as raw Markdown text instead of formatted HTML tables = 1.0.0 = Major release — security hardening, reliability improvements, and full tag management. **Security** * Webhook signatures — Disconnect and deactivation notifications are signed with HMAC-SHA256 (`X-DraftSEO-Signature`, `X-DraftSEO-Timestamp` headers); the API key is the signing secret and is never transmitted in plain text * Replay protection — Signed requests include a Unix timestamp; requests older than 5 minutes are rejected * API keys encrypted at rest — AES-256-CBC with a unique IV per key, derived from the WordPress site's auth salt **Publishing & REST API** * Tags endpoint — `GET /wp-json/draftseo/v1/tags` added for tag sync, matching the existing `/users` and `/categories` endpoints * Server-side input validation — `/publish` and `/update` routes validate and sanitise all params before the handler runs * Structured error responses — All errors return specific codes (`rest_forbidden`, `rest_missing_param`, `rest_publish_error`, etc.) for better debugging * Bidirectional disconnect — Disconnecting from DraftSEO.ai calls `/remote-disconnect` to clear connection settings on the plugin side automatically **Reliability** * Handles security plugin blocks and maintenance pages gracefully — no silent failures when a WAF or caching layer intercepts requests * Sync requests now have a timeout so connections never hang indefinitely * Multi-site view: individual site connection errors are isolated so one broken connection does not affect others **Performance** * Users, categories, and tags are now fetched in parallel instead of sequentially * Retries only fire on server errors (5xx) — client errors (4xx) fail immediately without wasting retry attempts **Tag Management** * Auto-create WordPress tags from AI-generated keywords at publish time (configurable, 1–10 tags) * Select from existing WordPress tags, or create new ones on the fly during publishing **Image Handling** * All images downloaded directly to your WordPress Media Library * Alt text from DraftSEO.ai preserved as WordPress image alt text * Featured image set automatically; all image URLs in post content updated from DraftSEO.ai CDN to your local Media Library URLs **Usability** * "Settings" quick-link added to the Plugins page for faster access to plugin configuration = 0.2.0 = Initial beta release. * One-click blog publishing from DraftSEO.ai * Automatic image import from DraftSEO.ai * SEO metadata transfer * WordPress category sync * Auto-create tags from keywords * Multiple post status options (draft, publish, schedule) * Content cleanup and formatting * Secure API key encryption * Background image processing for large blogs * Remote disconnect synchronization * OAuth-based connection flow == Upgrade Notice == = 1.7.2 = Articles publish even when your web server cannot receive large requests — updating is recommended if DraftSEO.ai reported "Missing parameter(s): title, content". = 1.7.1 = Images DraftSEO.ai adds to your Media Library show "Uploaded by: DraftSEO.ai" instead of "(no author)", and new articles bring lighter WebP images with file names that describe them. = 1.7.0 = Puts your articles back in your SEO plugin's XML sitemap, adds full All in One SEO, SEOPress and The SEO Framework support, fixes garbled image alt text, and fills in the WordPress excerpt. Includes security hardening — updating is recommended. Tested with WordPress 7.1 and PHP 8.5. = 1.6.3 = Explains what to do when your web host blocks the connection to DraftSEO.ai. Connected sites are unaffected. = 1.6.2 = ClassicPress sites: fixes articles being published with block-editor markup that ClassicPress cannot render. WordPress sites are unaffected by this release. = 1.6.1 = Lets DraftSEO.ai link your articles to your WooCommerce product category pages. = 1.6.0 = Articles now arrive as separate editable blocks in the WordPress editor, and open in Elementor as a real layout instead of one giant text box. = 1.5.3 = Removes false "Out of sync" warnings by checking with DraftSEO.ai first, and adds one-click Reconnect when a reconnect is really needed. = 1.5.2 = Stops an article that is still being prepared from being listed as published while it is still a draft on your site. = 1.5.1 = Rescues articles left stuck as an invisible draft, and tells DraftSEO why a publish failed instead of leaving you to guess. = 1.5.0 = Fixes publishing failures on hosting with a low PHP memory limit, and stops articles appearing on your site before their images have finished loading. = 1.4.0 = Reinstalling the plugin no longer breaks the link to your published articles, and articles that already lost it can be reconnected from DraftSEO. = 1.3.10 = Stops articles being reported as failed when their images imported perfectly, and tells you when only some images made it. = 1.3.9 = Your site now tells DraftSEO which plugin version it is running, so problems on a single site are far quicker to diagnose. = 1.3.8 = Images now start importing straight after publishing instead of waiting for your site's next visitor. = 1.3.7 = DraftSEO now sees custom page types such as Services and Projects, so new articles can link to them with their real titles. = 1.3.6 = Image-import results now identify which post they belong to, so a failed import is traceable to the article in your DraftSEO publishing history. = 1.3.4 = Fixes incomplete video structured data that Google Search Console reports as a critical error on posts containing a YouTube video. = 1.3.3 = Failed image imports now retry over several days and report a clear reason, so posts no longer end up permanently pointing at missing images. = 1.3.2 = Republishing now respects your featured-image setting, so updated posts no longer show a duplicated image at the top. = 1.3.1 = Refreshed light-themed admin design and brand-matched menu icon, faster re-publishing, more efficient syncing, and gentler default image importing. = 1.3.0 = Security and reliability update: disconnecting now fully revokes access, the connection flow is locked to the official DraftSEO address, publish success is reported accurately, and background image jobs are crash-hardened. Recommended for all users. = 1.2.7 = Confirmed compatible with WordPress 7.0, removes an early-translation debug notice, and adds automatic image alt text from embedded photo metadata. Recommended for all users. = 1.2.6 = Fixes intermittent HTTP 500 errors on publish caused by third-party plugins on your WordPress site, a featured image crash on legacy imports, and a 30-second hang when publishing blogs with no images. Recommended for all users. = 1.2.5 = Hotfix for WordPress auto-publish failing with HTTP 500 on sites where any browser cookie has a numeric name. Recommended for all users. = 1.2.4 = Fixes stuck "images importing…" jobs, adds a Logs tab in the plugin settings page with CSV export, and routes all image import errors to a searchable DB log. Recommended for all users. = 1.2.2 = Fixes 5 bugs (duplicate posts, SEO title not written, image captions dropped, repair scan skipped after manual update, double-scheduling guard) and adds SEOPress support, VideoObject schema for YouTube embeds, and automatic sync reconciliation. Recommended for all users. = 1.2.1 = Internal code reorganisation only — no new features or behaviour changes. = 1.2.0 = Significantly improves image import reliability, automatically repairs all previously affected posts in the background after updating, and adds continuous health monitoring that catches any future stuck imports within 24 hours and fixes them automatically. Recommended for all users. = 1.1.6 = Republishing a post is now faster — images already in your Media Library are not re-downloaded. Recommended for all users who republish posts regularly. = 1.1.5 = Fixes the "Republish" button being blocked when images are still uploading in the background. All publish paths now report completion reliably. Recommended for all users. = 1.1.4 = Cosmetic improvements and better connectivity feedback. The settings page now clearly shows when your connection to DraftSEO.ai is out of sync, with guided steps to fix it. = 1.1.3 = Reliability improvements. Fixes images not appearing on low-traffic sites, background tasks not stopping cleanly on deactivation, and translations on non-English installs. Recommended for all users. = 1.1.2 = Security update. Fixes API authentication failures on certain WordPress configurations that prevented DraftSEO.ai from syncing disconnect and deactivation events with your site. = 1.1.0 = When you republish a post with a new AI-generated image, the previous image is automatically removed from your WordPress Media Library. Saves storage space and keeps your media folder clean. = 1.0.5 = YouTube videos now display as embedded players on published WordPress posts. = 1.0.4 = Fixes headings appearing as plain text after images in published posts. Also removes unwanted image captions that were displaying as visible text below every image. = 1.0.3 = Fixes YouTube videos being stripped when publishing to WordPress. Also fixes headings rendering as plain text and malformed citation links. = 1.0.2 = Hotfix: Fixes in-text citations, references list, external links, and adds FAQ structured data (JSON-LD) for SEO rich results. = 1.0.1 = Hotfix: Fixes YouTube video embeds and data tables not rendering correctly in published posts. = 1.0.0 = Major release with 30+ improvements to security, performance, and API architecture. See changelog for full details. = 0.2.0 = Initial beta release of DraftSEO.ai plugin. == External Services == This plugin connects to DraftSEO.ai to generate and publish AI-written blog content. An active DraftSEO.ai account is required. Data sent to DraftSEO.ai: - Your website URL and a connection token (set up automatically when you connect) - Publishing results for the blogs you choose to publish, with technical details that help diagnose them: the plugin, WordPress and PHP versions, the PHP memory limit, which editor your site uses, which supported SEO plugin is active, and whether your theme shows the post title as a heading - A notice when the plugin is switched off, disconnected or deleted, so your account stays in sync. It says which of the three it was, the username and user ID of the WordPress user who did it, how it was done (for example the Plugins screen or WP-CLI), and the plugin and WordPress versions Data DraftSEO.ai reads from your site, using the connection token: - Your published posts, pages and product categories (titles, addresses, SEO descriptions), so new articles can link to them - This plugin's own log of warnings and errors (about publishing, image imports and SEO data), so DraftSEO.ai support can find and fix problems. It contains no information about your visitors Data received from DraftSEO.ai: - Generated blog content - Images and their metadata - When your server cannot receive a large article, the plugin downloads it from DraftSEO.ai instead. That request sends your website URL, the plugin version and a one-time code, signed with your connection token (the token itself is never sent) Service provider: DraftSEO.ai — [draftseo.ai](https://draftseo.ai) [Terms of Service](https://draftseo.ai/terms) · [Privacy Policy](https://draftseo.ai/privacy)