{"id":356494,"date":"2026-08-23T18:03:48","date_gmt":"2026-08-23T18:03:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/koz-seo-core\/"},"modified":"2026-08-24T06:04:36","modified_gmt":"2026-08-24T06:04:36","slug":"koz-seo-core","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/koz-seo-core\/","author":18387562,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.1.22","stable_tag":"2.1.22","tested":"7.1","requires":"7.0","requires_php":"8.0","requires_plugins":null,"header_name":"KOZ SEO Core","header_author":"Tony Kozyriev","header_description":"Lightweight standalone SEO, metadata, schema, sitemap integration, AI discovery and accessibility audit.","assets_banners_color":"281a73","last_updated":"2026-08-24 06:04:36","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.paypal.com\/cgi-bin\/webscr?cmd=_donations&business=kozyriev%40uafree.org&item_name=Support+KOZ+WordPress+plugin+development&currency_code=USD","header_plugin_uri":"https:\/\/github.com\/ramirkoz\/ua-free-plugins","header_author_uri":"https:\/\/www.linkedin.com\/in\/tonykoz\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":50,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"2.1.22":{"tag":"2.1.22","author":"ramirkz","date":"2026-08-24 06:04:36"}},"upgrade_notice":{"2.1.8":"<p>Requires WordPress 7.0+ because AI Vision now relies on the native WordPress AI Client and Connectors API.<\/p>","2.1.6":"<p>Adds an opt-in dry-run ALT workflow; no image ALT values are changed automatically on upgrade.<\/p>","2.1.5":"<p>Corrects metadata resolution for custom-rendered public pages without changing saved SEO fields.<\/p>","2.1.3":"<p>Updates only public filter hook names; saved SEO settings and metadata remain unchanged.<\/p>","2.1.1":"<p>Updates the public filter hook prefixes for WordPress.org compliance without changing saved SEO settings.<\/p>","2.1.0":"<p>The public plugin folder and slug changed. Deactivate the former package first, then verify metadata output before deleting it.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3662726,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3662726,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3662726,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3662726,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.1.22"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[1953,239487,1117,186,1557],"plugin_category":[34,55],"plugin_contributors":[275103],"plugin_business_model":[],"class_list":["post-356494","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-llms","plugin_tags-schema","plugin_tags-seo","plugin_tags-sitemap","plugin_category-accessibility","plugin_category-seo-and-marketing","plugin_contributors-ramirkz","plugin_committers-ramirkz"],"banners":{"banner":"https:\/\/ps.w.org\/koz-seo-core\/assets\/banner-772x250.png?rev=3662726","banner_2x":"https:\/\/ps.w.org\/koz-seo-core\/assets\/banner-1544x500.png?rev=3662726","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/koz-seo-core\/assets\/icon-128x128.png?rev=3662726","icon_2x":"https:\/\/ps.w.org\/koz-seo-core\/assets\/icon-256x256.png?rev=3662726","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>KOZ SEO Core combines technical SEO with an administrator-controlled OpenAI Vision workflow for image accessibility.<\/p>\n\n<p><strong>OpenAI Vision can analyze the actual image and automatically draft useful ALT descriptions.<\/strong> The administrator sees the real image thumbnail, current ALT, AI candidate, confidence and reason, can edit the suggestion, re-analyze or skip the image, and explicitly approve the final ALT before it is saved.<\/p>\n\n<p>AI-generated ALT candidates are never written automatically during analysis. Existing ALT values are preserved unless replacement is deliberately enabled.<\/p>\n\n<p>Technical SEO features include:<\/p>\n\n<ul>\n<li>SEO titles and meta descriptions.<\/li>\n<li>Canonical URLs and robots directives.<\/li>\n<li>Open Graph and Twitter metadata.<\/li>\n<li>JSON-LD schema.<\/li>\n<li>Hreflang support.<\/li>\n<li>WordPress sitemap controls.<\/li>\n<li><code>\/llms.txt<\/code> and <code>\/.well-known\/koz-ai-manifest.json<\/code> for AI discovery.<\/li>\n<li>Read-only inventory of other SEO plugins.<\/li>\n<li>Browser-rendered accessibility audit.<\/li>\n<\/ul>\n\n<h4>OpenAI Vision image ALT<\/h4>\n\n<ul>\n<li>Analyzes the actual image instead of guessing from filenames or URLs.<\/li>\n<li>Automatically drafts accessibility-focused ALT descriptions.<\/li>\n<li>Supports administrator-controlled batches for large media libraries.<\/li>\n<li>Shows the real thumbnail, current ALT, editable AI candidate, confidence and reason.<\/li>\n<li>Supports approve\/apply, skip and individual re-analysis.<\/li>\n<li>Preserves existing ALT by default.<\/li>\n<li>Uses the WordPress AI Client and the OpenAI provider configured by the administrator.<\/li>\n<li>KOZ SEO Core does not store the OpenAI API key.<\/li>\n<\/ul>\n\n<h4>Part of the KOZ Suite<\/h4>\n\n<p>KOZ SEO Core is <strong>one focused module of the broader KOZ Suite<\/strong>, a family of WordPress plugins that share a common KOZ administration experience and visual identity. Each plugin remains independent, so site owners can install only the modules they need or combine several modules as one toolkit.<\/p>\n\n<p>Current public KOZ plugins:<\/p>\n\n<ul>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/koz-seo-core\/\">KOZ SEO Core<\/a> \u2014 technical SEO, schema, sitemaps, AI discovery and OpenAI Vision image ALT.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/koz-copy-actions\/\">KOZ Copy Actions<\/a> \u2014 accessible copy-to-clipboard actions for WordPress content.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/koz-url-only-comment-spam\/\">KOZ URL-Only Comment Spam<\/a> \u2014 privacy-first local moderation for URL-only comment spam.<\/li>\n<\/ul>\n\n<p>Additional KOZ Suite modules are used in production and may be published separately as they are prepared for public distribution.<\/p>\n\n<h4>Privacy and control<\/h4>\n\n<p>AI Vision runs only when an administrator explicitly starts analysis. The selected image and a short task prompt may be sent through the configured OpenAI connector. The rest of KOZ SEO Core works without OpenAI.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Deactivate the former UA FREE SEO Core package, but keep it installed during verification.<\/li>\n<li>Upload and activate KOZ SEO Core.<\/li>\n<li>Open KOZ Suite &gt; SEO Core and confirm the existing settings.<\/li>\n<li>Keep SEO output disabled while another SEO plugin is active.<\/li>\n<li>Check <code>\/llms.txt<\/code>, <code>\/.well-known\/koz-ai-manifest.json<\/code> and one page source.<\/li>\n<li>Run Plugin Check.<\/li>\n<li>Remove the former package only after the KOZ version works correctly.<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>2.1.22<\/h4>\n\n<ul>\n<li>WordPress.org compatibility metadata: updated Tested up to to WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>2.1.21<\/h4>\n\n<ul>\n<li>Hardens JSON-LD output for WordPress.org review by using script-safe default wp_json_encode() escaping.<\/li>\n<li>Removes JSON_UNESCAPED_* flags from generated JSON output paths while preserving valid JSON responses and audit data.<\/li>\n<li>No SEO, sitemap, translation, AI Vision or saved-metadata behavior changes.<\/li>\n<\/ul>\n\n<h4>2.1.20<\/h4>\n\n<ul>\n<li>Stops changing the activation status of the former UA FREE SEO plugin; administrators remain in control of plugin activation and deactivation.<\/li>\n<li>Documents the optional OpenAI service used only when an administrator explicitly runs AI Vision ALT analysis.<\/li>\n<li>Keeps SEO output, sitemap cleanup, translation integration and saved metadata behavior unchanged.<\/li>\n<\/ul>\n\n<h4>2.1.19<\/h4>\n\n<ul>\n<li>Excludes Pagelayer technical templates from the WordPress XML sitemap and marks direct template views noindex\/follow.<\/li>\n<li>Removes the WordPress users sitemap whenever author archives are configured noindex, keeping sitemap discovery aligned with robots policy.<\/li>\n<li>Leaves normal pages, posts, public gallery content and active translator-managed routes unchanged.<\/li>\n<\/ul>\n\n<h4>2.1.18<\/h4>\n\n<ul>\n<li>Keeps all source-language SEO features fully standalone when no translation plugin is installed.<\/li>\n<li>Accepts an optional provider-neutral translation contract for multilingual hreflang filtering.<\/li>\n<li>Does not force KOZ language namespaces when another translator owns multilingual routing or SEO.<\/li>\n<li>Integrates automatically with KOZ Static Translate for ready-only hreflang and translated sitemap discovery.<\/li>\n<\/ul>\n\n<h4>2.1.15<\/h4>\n\n<ul>\n<li>Adds an administrator-triggered browser-rendered accessibility audit for published pages.<\/li>\n<li>Checks actual same-site rendered HTML for H1 count, empty ALT text, potential empty links, meta description presence and noindex state.<\/li>\n<li>Runs in the administrator browser to avoid long PHP export requests; no database writes or external HTTP requests are performed.<\/li>\n<li>Exports a privacy-safe JSON result containing public paths and counts only, without page HTML or visitor data.<\/li>\n<\/ul>\n\n<h4>2.1.14<\/h4>\n\n<ul>\n<li>Prevents WordPress block and gallery configuration JSON from leaking into automatic meta and social descriptions.<\/li>\n<li>Uses a clean page-title fallback when a gallery page has too little natural text for a useful description.<\/li>\n<li>Keeps explicitly saved manual SEO descriptions unchanged.<\/li>\n<\/ul>\n\n<h4>2.1.13<\/h4>\n\n<ul>\n<li>Keeps the AI Vision batch controls usable after applying ALT values or after a transient provider readiness check.<\/li>\n<li>Applying selected ALT values no longer forces a full page reload.<\/li>\n<\/ul>\n\n<h4>2.1.12<\/h4>\n\n<ul>\n<li>Fixed Plugin Check escaping and sanitization findings in AI Vision ALT workflow.<\/li>\n<li>Preserved editable candidates, approve\/skip\/re-analyze controls, and new-media queue.<\/li>\n<\/ul>\n\n<h4>2.1.11<\/h4>\n\n<ul>\n<li>Lets administrators edit every AI Vision ALT candidate before approval.<\/li>\n<li>Adds explicit approve\/apply, skip and per-image re-analysis controls.<\/li>\n<li>Adds an \u201cEmpty ALT, not analyzed\u201d routine queue and an all-unprocessed queue for existing ALT review.<\/li>\n<li>Shows a pending counter for unprocessed images with empty ALT so newly uploaded media can be handled in later batches.<\/li>\n<li>Keeps Vision review state across plugin upgrades instead of re-queuing already processed images because of a version bump.<\/li>\n<li>Existing WordPress ALT values remain protected unless replacement is explicitly enabled.<\/li>\n<\/ul>\n\n<h4>2.1.10<\/h4>\n\n<ul>\n<li>Makes Vision batches resilient to intermittent WordPress\/OpenAI model-discovery failures.<\/li>\n<li>Retries multimodal text generation with progressively simpler model-selection constraints.<\/li>\n<li>Removes structured-output and max-token capability requirements from model discovery; JSON is requested and validated in the prompt instead.<\/li>\n<li>Does not write ALT during analysis and preserves the explicit review\/apply workflow.<\/li>\n<\/ul>\n\n<h4>2.1.9<\/h4>\n\n<ul>\n<li>Moves AI Vision analysis from admin-ajax to a dedicated authenticated REST endpoint, following the WordPress 7.0 AI Client integration guidance.<\/li>\n<li>Avoids the false \u201cOpenAI is not ready\u201d readiness result seen only inside admin-ajax while the connector is available in the normal admin request.<\/li>\n<li>Keeps ALT analysis read-only until explicit apply and preserves the existing OpenAI Connector credentials flow.<\/li>\n<\/ul>\n\n<h4>2.1.8<\/h4>\n\n<ul>\n<li>Raises the minimum WordPress version to 7.0 because the AI Vision workflow uses the native WordPress AI Client introduced in 7.0.<\/li>\n<li>Removes Plugin Check compatibility errors for wp_ai_client_prompt() and wp_supports_ai().<\/li>\n<li>Tightens nonce\/input handling and removes the reported direct SQL\/slow meta-query warnings from the AI Vision ALT manager.<\/li>\n<li>Replaces metadata queries used for queue\/preview\/statistics with a lightweight cursor, recent-ID list and incremental counters.<\/li>\n<li>Uses GPT-5.6 Luna first, with Terra and GPT-5.4 nano as fallbacks for OpenAI Vision analysis.<\/li>\n<\/ul>\n\n<h4>2.1.7<\/h4>\n\n<ul>\n<li>Replaces metadata\/filename ALT heuristics with actual AI vision analysis.<\/li>\n<li>Uses the native WordPress 7.0 AI Client and OpenAI connector; KOZ SEO Core no longer stores an OpenAI API key.<\/li>\n<li>Analyzes images progressively in administrator-controlled batches and never writes ALT during analysis.<\/li>\n<li>Returns content\/decorative\/uncertain decisions with confidence and a human-readable reason.<\/li>\n<li>Shows actual thumbnails, current ALT and AI candidates before any write.<\/li>\n<li>Preserves existing ALT by default; replacement requires an explicit administrator checkbox.<\/li>\n<\/ul>\n\n<h4>2.1.6<\/h4>\n\n<ul>\n<li>Adds a Media ALT assistant for image attachments with an explicit dry run before any write.<\/li>\n<li>Auto-applies only high-confidence candidates from existing caption, description or clearly human-authored attachment titles.<\/li>\n<li>Never overwrites existing ALT values; filename-only, generic and page-context-only cases remain review-only.<\/li>\n<li>Applies safe candidates in AJAX batches to avoid one large write request.<\/li>\n<\/ul>\n\n<h4>2.1.5<\/h4>\n\n<ul>\n<li>Resolves non-root public permalinks before trusting front-page conditionals, so page-builder routes keep their own title, description, canonical and Open Graph URL.<\/li>\n<li>Leaves the real homepage behavior and saved SEO metadata unchanged.<\/li>\n<\/ul>\n\n<h4>2.1.5<\/h4>\n\n<ul>\n<li>Fixes SEO context on valid page-builder\/custom-rendered permalinks that WordPress does not expose as singular requests.<\/li>\n<li>Uses the configured organization description for homepage metadata instead of falling back to a polluted site tagline.<\/li>\n<\/ul>\n\n<h4>2.1.3<\/h4>\n\n<ul>\n<li>Strict WordPress.org prefix re-audit with canonical kozseo \/ KOZSEO identifiers.<\/li>\n<li>Preserves legacy settings, post metadata, AI manifest route and public filter compatibility.<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Aligned the public context and hreflang filter hooks with the KOZ SEO prefix required by Plugin Check.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Rebranded the public package as KOZ SEO Core.<\/li>\n<li>Added KOZ Suite navigation, ten runtime administration languages and English fallback.<\/li>\n<li>Added the KOZ AI manifest endpoint while retaining the former endpoint for compatibility.<\/li>\n<li>Preserved existing settings, post metadata and migration-safe read-only diagnostics.<\/li>\n<li>Replaced bundled PO\/MO translations with runtime dictionaries and a source POT file.<\/li>\n<li>Updated ownership, support and repository metadata.<\/li>\n<\/ul>\n\n<h4>2.0.8<\/h4>\n\n<ul>\n<li>Last stable release under the former UA FREE public branding.<\/li>\n<\/ul>","raw_excerpt":"Lightweight SEO metadata, schema, sitemap controls, AI discovery files and accessibility diagnostics.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/356494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=356494"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ramirkz"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=356494"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=356494"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=356494"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=356494"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=356494"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=356494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}