{"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-28T06:41:11","modified_gmt":"2026-08-28T06:41:11","slug":"koz-seo-core","status":"publish","type":"plugin","link":"https:\/\/me.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-28 06:41:11","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":72,"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-28 06:41:11","revision":3669912}},"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 generates document titles, meta descriptions, canonical URLs, robots directives, Open Graph and Twitter metadata, JSON-LD schema, hreflang links and WordPress sitemap controls.<\/p>\n\n<p>It also provides <code>\/llms.txt<\/code>, <code>\/.well-known\/koz-ai-manifest.json<\/code>, a read-only inventory of other SEO plugins and a limited accessibility audit. Existing settings and post metadata from the former UA FREE package remain in place and are reused automatically.<\/p>\n\n<p>The plugin was originally developed for the UA FREE charitable foundation website, which remains a production environment for the suite. The software is independently owned and maintained by Tony Kozyriev (<code>ramirkz<\/code>).<\/p>\n\n<h4>Part of the KOZ Suite<\/h4>\n\n<p>KOZ SEO Core is one focused module of the KOZ Suite, a family of independent WordPress plugins with a shared KOZ administration experience and visual identity.<\/p>\n\n<p>Each KOZ plugin can be installed independently or combined with other KOZ Suite modules.<\/p>\n\n<p>Current public KOZ plugins:<\/p>\n\n<ul>\n<li>KOZ SEO Core \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 selected 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<li><a href=\"https:\/\/wordpress.org\/plugins\/koz-static-translate\/\">KOZ Static Translate<\/a> \u2014 AI-powered multilingual translation with Microsoft Azure Translator and static language routes.<\/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>Main features<\/h4>\n\n<ul>\n<li>SEO title, description, canonical, robots and social metadata.<\/li>\n<li>Organization and webpage JSON-LD schema.<\/li>\n<li>WordPress sitemap filtering for public content while excluding technical Pagelayer templates and noindexed author archives.<\/li>\n<li><code>llms.txt<\/code> and KOZ AI manifest endpoints.<\/li>\n<li>Per-post SEO fields using established storage keys.<\/li>\n<li>Read-only inventory of Rank Math, Yoast, AIOSEO, SEOPress and The SEO Framework.<\/li>\n<li>Limited accessibility audit and privacy-safe JSON report.<\/li>\n<li>AI Vision ALT workflow using the native WordPress 7.0 AI Client and Settings \u2192 Connectors.<\/li>\n<li>Ten administration languages with English fallback.<\/li>\n<li>KOZ Suite navigation and separate developer\/foundation support.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>The optional AI Vision ALT workflow uses the WordPress 7.0 AI Client with the OpenAI provider configured by the site administrator under Settings \u2192 Connectors. KOZ SEO Core does not store an OpenAI API key.<\/p>\n\n<p>Only when an administrator explicitly starts AI Vision analysis, the selected image file and a short prompt that may include the parent page title are sent through the configured OpenAI connector for image analysis. No visitor data is sent by this feature. The rest of KOZ SEO Core works without this service.<\/p>\n\n<p>OpenAI service: https:\/\/openai.com\/\nOpenAI Terms of Use: https:\/\/openai.com\/policies\/terms-of-use\/\nOpenAI Privacy Policy: https:\/\/openai.com\/policies\/privacy-policy\/<\/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>Updated KOZ Suite documentation to include KOZ Static Translate as the fourth public plugin.<\/li>\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:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/356494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=356494"}],"author":[{"embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ramirkz"}],"wp:attachment":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=356494"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=356494"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=356494"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=356494"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=356494"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=356494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}