{"id":353214,"date":"2026-08-18T06:44:17","date_gmt":"2026-08-18T06:44:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/koz-url-only-comment-spam\/"},"modified":"2026-08-28T06:41:29","modified_gmt":"2026-08-28T06:41:29","slug":"koz-url-only-comment-spam","status":"publish","type":"plugin","link":"https:\/\/cor.wordpress.org\/plugins\/koz-url-only-comment-spam\/","author":18387562,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.11","stable_tag":"1.1.11","tested":"7.1","requires":"6.2","requires_php":"8.0","requires_plugins":null,"header_name":"KOZ URL-Only Comment Spam","header_author":"Tony Kozyriev","header_description":"Privacy-first moderation for comments whose visible content contains only URLs.","assets_banners_color":"251b6b","last_updated":"2026-08-28 06:41:29","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/github.com\/ramirkoz\/ua-free-plugins#support-plugin-development","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":129,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.10":{"tag":"1.1.10","author":"ramirkz","date":"2026-08-18 06:43:48","revision":3652143},"1.1.11":{"tag":"1.1.11","author":"ramirkz","date":"2026-08-28 06:41:29","revision":3669913}},"upgrade_notice":{"1.1.11":"<p>WordPress 7.1 compatibility metadata update; moderation behavior and stored data remain unchanged.<\/p>","1.1.10":"<p>Public WordPress.org release of the current production-tested package; moderation behavior and stored data remain unchanged.<\/p>","1.1.7":"<p>Admin UI fix: removes the duplicate support block without changing moderation behavior or stored data.<\/p>","1.1.6":"<p>WordPress.org manual-review compliance update with plugin-specific identifiers and preserved settings migration.<\/p>","1.1.5":"<p>Unified namespace, constants and custom-hook prefix compliance update.<\/p>","1.1.2":"<p>Prefixing compliance update for custom hooks and uninstall cleanup.<\/p>","1.1.1":"<ul>\n<li>Updated hook and uninstall variable prefixes for WordPress Plugin Check compliance.<\/li>\n<\/ul>","1.1.0":"<p>KOZ rebrand and multilingual administration update with preserved moderation settings.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3662729,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3662729,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3662729,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3662729,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.10","1.1.11"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[107,1756,396,599,538],"plugin_category":[44,54],"plugin_contributors":[275103],"plugin_business_model":[],"class_list":["post-353214","plugin","type-plugin","status-publish","hentry","plugin_tags-comments","plugin_tags-moderation","plugin_tags-privacy","plugin_tags-spam","plugin_tags-url","plugin_category-discussion-and-community","plugin_category-security-and-spam-protection","plugin_contributors-ramirkz","plugin_committers-ramirkz"],"banners":{"banner":"https:\/\/ps.w.org\/koz-url-only-comment-spam\/assets\/banner-772x250.png?rev=3662729","banner_2x":"https:\/\/ps.w.org\/koz-url-only-comment-spam\/assets\/banner-1544x500.png?rev=3662729","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/koz-url-only-comment-spam\/assets\/icon-128x128.png?rev=3662729","icon_2x":"https:\/\/ps.w.org\/koz-url-only-comment-spam\/assets\/icon-256x256.png?rev=3662729","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>KOZ URL-Only Comment Spam is a focused moderation tool for a common low-effort spam pattern: comments containing only one or more links. It can send matching comments directly to spam or hold them for manual moderation while ordinary comments continue through the normal WordPress workflow.<\/p>\n\n<p>The detector removes HTML and invisible spacing characters before checking the visible content. It can exempt logged-in users, trust same-site links and approved domains, and lets an administrator test a sample without saving that sample.<\/p>\n\n<p>Privacy remains deliberately limited. The plugin stores no comment text, detected URL, IP address, email, referrer, cookie, fingerprint or user-agent value. It stores only aggregate counts and a small summary of the latest match.<\/p>\n\n<p>Use case: a public website receives repeated comments made entirely of promotional URLs. The plugin removes that noise before it reaches the normal review queue, without sending comment data to an external service.<\/p>\n\n<p>Use case: a community site permits internal resource links but wants external URL-only comments reviewed. Trusted-domain settings allow internal destinations while suspicious external links are handled automatically.<\/p>\n\n<p>The plugin was originally developed for the UA FREE charitable foundation website, which remains a production test environment. Development and ownership belong to Tony Kozyriev (<code>ramirkz<\/code>). Foundation donations and developer support are separate.<\/p>\n\n<h4>Part of the KOZ Suite<\/h4>\n\n<p>KOZ URL-Only Comment Spam 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><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 selected WordPress content.<\/li>\n<li>KOZ URL-Only Comment Spam \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<p>Features:<\/p>\n\n<ul>\n<li>Detect one or more URL-only values after HTML and invisible spacing are removed.<\/li>\n<li>Preserve comments that contain human-readable text.<\/li>\n<li>Ignore pingbacks, trackbacks, administrators and comment moderators.<\/li>\n<li>Optionally exempt all logged-in users.<\/li>\n<li>Optionally trust same-site links and selected domains.<\/li>\n<li>Choose between spam and moderation queue.<\/li>\n<li>Test samples without saving them.<\/li>\n<li>Administration interface in Ukrainian, Chinese, Spanish, Arabic, Indonesian, Portuguese, French, Japanese, German and Hindi; English fallback.<\/li>\n<li>No external requests, telemetry, cookies, cron jobs or custom database tables.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Deactivate the legacy UA FREE URL-Only Comment Spam plugin if it is installed.<\/li>\n<li>Upload the KOZ ZIP through Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open KOZ Suite &gt; URL Comment Spam and review the settings.<\/li>\n<\/ol>\n\n<p>Existing UA FREE settings and aggregate counters are preserved automatically.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20send%20comment%20content%20to%20an%20external%20service%3F\"><h3>Does the plugin send comment content to an external service?<\/h3><\/dt>\n<dd><p>No. Detection runs locally in WordPress. The plugin does not send comment text, URLs, IP addresses, email addresses, referrers or user-agent values to an external service.<\/p><\/dd>\n<dt id=\"will%20ordinary%20comments%20be%20marked%20as%20spam%3F\"><h3>Will ordinary comments be marked as spam?<\/h3><\/dt>\n<dd><p>The detector targets comments whose visible content consists only of one or more URLs after HTML and invisible spacing are removed. Comments containing ordinary readable text continue through the normal WordPress workflow.<\/p><\/dd>\n<dt id=\"can%20i%20allow%20internal%20or%20trusted%20links%3F\"><h3>Can I allow internal or trusted links?<\/h3><\/dt>\n<dd><p>Yes. You can trust same-site links and add approved domains in the plugin settings.<\/p><\/dd>\n<dt id=\"can%20i%20test%20the%20detector%20without%20saving%20a%20comment%3F\"><h3>Can I test the detector without saving a comment?<\/h3><\/dt>\n<dd><p>Yes. The administration screen includes a sample test that does not persist the sample text.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.11<\/h4>\n\n<ul>\n<li>Updated KOZ Suite documentation to include KOZ Static Translate as the fourth public plugin.<\/li>\n<li>Updated WordPress compatibility metadata for WordPress 7.1.<\/li>\n<li>No changes to spam detection, moderation settings, counters or privacy behavior.<\/li>\n<\/ul>\n\n<h4>1.1.10<\/h4>\n\n<ul>\n<li>Publish the current production-tested package as the first public SVN release after WordPress.org approval.<\/li>\n<li>Keep moderation rules, stored settings, aggregate counters and privacy behavior unchanged.<\/li>\n<li>Refresh public release metadata for WordPress.org.<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>Fixed WordPress.org Stable tag metadata to match the plugin version.<\/li>\n<li>No changes to spam detection, settings, counters or support-panel behavior.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>Prevent duplicate support blocks when the shared KOZ Suite panel is active.<\/li>\n<li>Add the About the foundation button to standalone support fallback.<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>Fixed duplicate KOZ support panel rendering in WordPress admin by ensuring a single panel initialization.<\/li>\n<li>No changes to spam detection, stored settings, counters or compatibility behavior.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Standardized plugin-owned identifiers under the kozurlspam \/ KOZURLSPAM prefix and ramirkz&#092;kozurlspam namespace.<\/li>\n<li>Replaced shared support\/runtime identifiers with plugin-specific equivalents.<\/li>\n<li>Migrates existing UA FREE settings into the canonical KOZ option names without exposing copied comment content.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Unified the namespace, global constants and KOZ hooks under the exact KOZURLOnlyCommentSpam prefix.<\/li>\n<li>Preserved existing settings and UA FREE compatibility hooks.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Aligned KOZ hook names with the plugin namespace prefix used by Plugin Check.<\/li>\n<li>Removed the global uninstall variable while preserving conditional data deletion.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Rebranded the plugin under the independent KOZ suite.<\/li>\n<li>Added the KOZ Suite menu and shared support panel.<\/li>\n<li>Added administration localization for ten languages plus English fallback.<\/li>\n<li>Preserved legacy settings, counters, filters and event hooks.<\/li>\n<li>Added KOZ-prefixed filters and event hooks.<\/li>\n<li>Removed bundled PO and MO files for WordPress.org compatibility.<\/li>\n<\/ul>","raw_excerpt":"Privacy-first moderation for comments whose visible content consists only of URLs.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/353214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=353214"}],"author":[{"embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ramirkz"}],"wp:attachment":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=353214"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=353214"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=353214"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=353214"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=353214"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=353214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}