{"id":264268,"date":"2025-12-06T16:32:43","date_gmt":"2025-12-06T16:32:43","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/filikod\/"},"modified":"2026-09-20T22:24:26","modified_gmt":"2026-09-20T22:24:26","slug":"filikod","status":"publish","type":"plugin","link":"https:\/\/ko.wordpress.org\/plugins\/filikod\/","author":23229745,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"1.2.0","tested":"7.1.2","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Filikod \u2013 ALT Text Audit & Bulk Management","header_author":"Filikod","header_description":"A modern WordPress plugin for media optimization (images), improved accessibility, and ALT text management.","assets_banners_color":"3100e4","last_updated":"2026-09-20 22:24:26","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/filikod.com","header_author_uri":"https:\/\/filikod.com","rating":5,"author_block_rating":0,"active_installs":100,"downloads":2355,"num_ratings":7,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"lyode","date":"2026-02-10 17:19:53","revision":3458278},"1.0.4":{"tag":"1.0.4","author":"lyode","date":"2026-02-16 17:55:59","revision":3462799},"1.0.5":{"tag":"1.0.5","author":"lyode","date":"2026-02-17 22:05:46","revision":3463864},"1.0.6":{"tag":"1.0.6","author":"lyode","date":"2026-02-24 00:13:49","revision":3468111},"1.0.7":{"tag":"1.0.7","author":"lyode","date":"2026-03-07 20:58:00","revision":3477174},"1.0.8":{"tag":"1.0.8","author":"lyode","date":"2026-04-06 15:30:28","revision":3499941},"1.0.9":{"tag":"1.0.9","author":"lyode","date":"2026-04-08 23:20:19","revision":3502034},"1.1.0":{"tag":"1.1.0","author":"lyode","date":"2026-04-20 23:09:50","revision":3511260},"1.1.1":{"tag":"1.1.1","author":"lyode","date":"2026-05-24 22:23:15","revision":3546687},"1.1.2":{"tag":"1.1.2","author":"lyode","date":"2026-07-03 22:47:59","revision":3595585},"1.1.3":{"tag":"1.1.3","author":"lyode","date":"2026-08-05 21:53:44","revision":3635872},"1.1.4":{"tag":"1.1.4","author":"lyode","date":"2026-08-17 13:14:06","revision":3651199},"1.2.0":{"tag":"1.2.0","author":"lyode","date":"2026-09-20 22:24:26","revision":3704678}},"upgrade_notice":{"1.2.0":"<p>New Filikod &gt; Duplicates screen: finds exact copies of images uploaded more than once (detection only), plus an optional alert when you upload a duplicate. Identical files sharing one ALT no longer count as duplicated ALT. Title counter in Settings. WordPress 7.1.1 compatibility confirmed.<\/p>","1.1.5":"<p>Maintenance release. WordPress 7.1 compatibility confirmed (full code audit, no incompatibility found) and all Plugin Check warnings resolved (line endings, phpcs annotations, readme). No functional change, safe update for all users.<\/p>","1.1.4":"<p>Fixes deleted media still showing up in the ALT Audit table: the audit cache is now invalidated when a media file is added or deleted, and rows for attachments that no longer exist are skipped. Recommended for all users.<\/p>","1.1.3":"<p>Recommended update. Camera\/export filenames (e.g. &quot;Rggx5025&quot;) are now flagged as Generic ALT. Fixes blocked ICO uploads, the SVG sanitizer stripping viewBox\/gradients\/clip paths, a sanitization bypass for sideloaded SVGs, and registers the missing filikod-resized image size.<\/p>","1.1.2":"<p>Security update: removes the SVGZ optional file type, which could bypass SVG sanitization. Also clarifies in the FAQ that the optional Automatic Image Resizing feature replaces original files. Update recommended for all users.<\/p>","1.1.1":"<p>Recommended update: ALT inherited from AI export filenames (Gemini, ChatGPT) is now detected as Generic. Includes Dashboard stats caching, a hardened ALT save endpoint, a WCAG-friendly SVG sanitizer, and better per-site multisite uninstall cleanup.<\/p>","1.1.0":"<p>Adds Too long ALT detection (&gt;125 chars) with its own tab, badge and Dashboard counter; new Decorative toggle (dedicated column, auto-saved) to flag intentional alt=&quot;&quot; images and exclude them from the score; refreshed badge colors; audit cache v3 (auto-rebuilt).<\/p>","1.0.9":"<p>Recommended update: <strong>Alt:<\/strong> prefix on all Media Library ALT Status badges; <strong>Alt: OK<\/strong> without checkmark; modal label alignment fix (stylesheet loaded after <code>media-views<\/code>); readme aligned.<\/p>","1.0.8":"<p>Recommended update: ALT Status in the Media Library (list, grid, modal) with live refresh; modal layout polish; faster duplicate detection while typing; internal JS refactor for bulk jobs.<\/p>","1.0.7":"<p>Extended generic ALT detection, logo+domain exception, &quot;Remove Title&quot; fix for new uploads, Duplicated tab sorted by ALT with list refresh on save, removed Clear\/Export CSV, security and coding standards fixes.<\/p>","1.0.6":"<p>Positioning and documentation update focused on ALT audit &amp; bulk management. Improves &quot;Generic ALT&quot; detection.<\/p>","1.0.5":"<p>Adds context visibility in ALT audit and improves bulk editing experience.<\/p>","1.0.4":"<p>Fixes audit score calculation and improves messaging.<\/p>","1.0.3":"<p>Dashboard redesign with ALT Quality Score, detailed audit and Media Size Savings module.<\/p>","1.0.0":"<p>First stable release with ALT automation, SVG security and extended file support.<\/p>\n\n<hr \/>\n\n<p>Filikod is developed by <a href=\"https:\/\/lyode.fr\/\">S\u00e9bastien<\/a>, freelance WordPress developer.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":7},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3413288,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3413288,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3468108,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3468108,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8","1.0.9","1.1.0","1.1.1","1.1.2","1.1.3","1.1.4","1.2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3499938,"resolution":"1","location":"assets","locale":"","width":1920,"height":1120},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3499938,"resolution":"2","location":"assets","locale":"","width":1920,"height":1080},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3499938,"resolution":"3","location":"assets","locale":"","width":1920,"height":1080},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3499938,"resolution":"4","location":"assets","locale":"","width":1920,"height":1080},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3499938,"resolution":"5","location":"assets","locale":"","width":1920,"height":1080}},"screenshots":{"1":"<strong>Dashboard<\/strong>: ALT Quality Score (0\u2013100%) with donut gauge and legend, issue counts (missing, generic, too short, <strong>too long<\/strong>, duplicated, <strong>decorative<\/strong>), optional <strong>Media Size Savings<\/strong> impact, and <strong>Library Overview<\/strong> (total images, total size, average size). Optional automation toggles summarized on the side.","2":"<strong>ALT Audit<\/strong>: Filter tabs for Missing, Generic, Too short, <strong>Too long<\/strong>, Duplicated, and <strong>Decorative<\/strong>; table with thumbnail, filename, <strong>Context<\/strong> (where the image is used), editable <strong>ALT<\/strong> field, issue label, a dedicated <strong>Decorative<\/strong> column with a toggle switch (auto-saved), and a per-row <strong>Save<\/strong> action. Duplicated ALT grouped for fast fixes.","3":"<strong>Settings: Accessibility \/ SEO<\/strong>: Toggles for automatic ALT from filename, optional title-attribute removal, and special-character cleanup; <strong>Process Existing Images<\/strong> for bulk apply; <strong>Save Changes<\/strong>.","4":"<strong>Attachment details<\/strong>: Native media modal\/sidebar with <strong>Alternative Text<\/strong> and Filikod <strong>ALT Status<\/strong> (e.g. green <strong>Alt: OK<\/strong> when rules pass), so you see health next to the field while you edit.","5":"<strong>Media Library (grid)<\/strong>: Thumbnails with <strong>ALT Status<\/strong> badges (e.g. <strong>Alt: OK<\/strong> on qualifying images) for a quick scan of library-wide ALT health."}},"plugin_section":[],"plugin_tags":[1953,256490,17214,233,186],"plugin_category":[55],"plugin_contributors":[245101],"plugin_business_model":[],"class_list":["post-264268","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-alt-audit","plugin_tags-alt-text","plugin_tags-media-library","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-lyode","plugin_committers-lyode"],"banners":{"banner":"https:\/\/ps.w.org\/filikod\/assets\/banner-772x250.jpg?rev=3468108","banner_2x":"https:\/\/ps.w.org\/filikod\/assets\/banner-1544x500.jpg?rev=3468108","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/filikod\/assets\/icon-128x128.png?rev=3413288","icon_2x":"https:\/\/ps.w.org\/filikod\/assets\/icon-256x256.png?rev=3413288","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/filikod\/assets\/screenshot-1.png?rev=3499938","caption":"<strong>Dashboard<\/strong>: ALT Quality Score (0\u2013100%) with donut gauge and legend, issue counts (missing, generic, too short, <strong>too long<\/strong>, duplicated, <strong>decorative<\/strong>), optional <strong>Media Size Savings<\/strong> impact, and <strong>Library Overview<\/strong> (total images, total size, average size). Optional automation toggles summarized on the side."},{"src":"https:\/\/ps.w.org\/filikod\/assets\/screenshot-2.png?rev=3499938","caption":"<strong>ALT Audit<\/strong>: Filter tabs for Missing, Generic, Too short, <strong>Too long<\/strong>, Duplicated, and <strong>Decorative<\/strong>; table with thumbnail, filename, <strong>Context<\/strong> (where the image is used), editable <strong>ALT<\/strong> field, issue label, a dedicated <strong>Decorative<\/strong> column with a toggle switch (auto-saved), and a per-row <strong>Save<\/strong> action. Duplicated ALT grouped for fast fixes."},{"src":"https:\/\/ps.w.org\/filikod\/assets\/screenshot-3.png?rev=3499938","caption":"<strong>Settings: Accessibility \/ SEO<\/strong>: Toggles for automatic ALT from filename, optional title-attribute removal, and special-character cleanup; <strong>Process Existing Images<\/strong> for bulk apply; <strong>Save Changes<\/strong>."},{"src":"https:\/\/ps.w.org\/filikod\/assets\/screenshot-4.png?rev=3499938","caption":"<strong>Attachment details<\/strong>: Native media modal\/sidebar with <strong>Alternative Text<\/strong> and Filikod <strong>ALT Status<\/strong> (e.g. green <strong>Alt: OK<\/strong> when rules pass), so you see health next to the field while you edit."},{"src":"https:\/\/ps.w.org\/filikod\/assets\/screenshot-5.png?rev=3499938","caption":"<strong>Media Library (grid)<\/strong>: Thumbnails with <strong>ALT Status<\/strong> badges (e.g. <strong>Alt: OK<\/strong> on qualifying images) for a quick scan of library-wide ALT health."}],"raw_content":"<!--section=description-->\n<p>Most WordPress sites have broken ALT text, and most site owners have no way to measure it.<\/p>\n\n<p>Missing, generic, duplicated or too-short ALT text quietly hurts your accessibility score and your image SEO. The problem stays invisible until it is too late.<\/p>\n\n<p><strong>Filikod scans your entire media library, gives you an ALT Quality Score from 0 to 100%, and gives you the tools to fix everything in bulk, directly inside WordPress.<\/strong><\/p>\n\n<p>No external API. No credits to buy. No complex setup.\nYou write the ALT text. You stay in control.<\/p>\n\n<p>https:\/\/www.youtube.com\/watch?v=C-yLjXhtwMs<\/p>\n\n<p><a href=\"https:\/\/filikod.com\/\">Full documentation and guides on filikod.com<\/a><\/p>\n\n\n\n<h4>Who is Filikod for?<\/h4>\n\n<p>Filikod is built for:<\/p>\n\n<ul>\n<li><strong>SEO professionals<\/strong> who want ALT text treated as a measurable ranking signal, not an afterthought<\/li>\n<li><strong>Accessibility-focused teams<\/strong> who need a structured audit to meet WCAG guidelines<\/li>\n<li><strong>Content managers<\/strong> with large media libraries who need to fix issues fast, in bulk<\/li>\n<li><strong>Agencies<\/strong> managing multiple WordPress sites who need a repeatable quality process<\/li>\n<li><strong>Anyone who wants full control<\/strong> over their ALT text quality at scale, without external services or paid credits<\/li>\n<\/ul>\n\n\n\n<h4>ALT Text Audit and Quality Score<\/h4>\n\n<p>Filikod scans your entire media library and instantly flags:<\/p>\n\n<ul>\n<li><strong>Missing ALT<\/strong>: images with no ALT attribute at all<\/li>\n<li><strong>Generic ALT<\/strong>: meaningless values like \"image\", \"photo\", \"logo\", \"thumbnail\", \"untitled\"<\/li>\n<li><strong>Too Short ALT<\/strong>: descriptions too brief to be useful for accessibility or SEO<\/li>\n<li><strong>Duplicated ALT<\/strong>: the same ALT text reused across multiple images<\/li>\n<\/ul>\n\n<p>You get a clear <strong>ALT Quality Score from 0 to 100%<\/strong> plus a breakdown by issue type, so you always know exactly what to fix first.<\/p>\n\n<p>This turns ALT text from a vague, invisible problem into a measurable system you can actually improve, like a health score for your media library.<\/p>\n\n\n\n<h4>Bulk ALT Management<\/h4>\n\n<p>Editing ALT text one image at a time is the reason most people never finish.<\/p>\n\n<p>Filikod lets you:<\/p>\n\n<ul>\n<li>Filter images by issue type (missing, generic, short, duplicated)<\/li>\n<li>Edit ALT text inline, directly from the audit view<\/li>\n<li>Save instantly without leaving the page<\/li>\n<li>Fix dozens or hundreds of images in minutes<\/li>\n<\/ul>\n\n<p>Built for real media libraries with thousands of images, not tidy demos with five.<\/p>\n\n\n\n<h4>Context-Based Editing<\/h4>\n\n<p>Good ALT text requires context. What is this image actually about on this page?<\/p>\n\n<p>Filikod shows you <strong>where each image is used<\/strong> (which post or page) so you can jump directly to the content and write accurate, relevant ALT text. No guesswork.<\/p>\n\n\n\n<h4>Duplicate Image Detection<\/h4>\n\n<p>The same logo uploaded three times, the same photo dropped into two pages by two editors: exact copies pile up in every real media library, waste disk space and split your ALT work across files.<\/p>\n\n<p>Filikod fingerprints the original file of every image (md5, computed on upload and back-filled for your existing library by a batched scan) and lists every group of identical copies in <strong>Filikod &gt; Duplicates<\/strong>:<\/p>\n\n<ul>\n<li>One row per copy with thumbnail, file name, ID, dimensions, size, upload date, <strong>Context<\/strong> (where it is used) and ALT text<\/li>\n<li>The oldest copy is flagged so you know which one to keep<\/li>\n<li>Redundant files and wasted space are summed up on the Dashboard<\/li>\n<\/ul>\n\n<p>Detection only: Filikod never deletes or merges anything. You decide from the Media Library once you have checked where each copy is used.<\/p>\n\n<p>Multilingual sites are handled. Media linked as translations of each other by <strong>Polylang<\/strong>, <strong>WPML<\/strong> (Media Translation) or <strong>Bogo<\/strong>, one attachment per language for the same file, are intentional and never reported as duplicates; unlinked copies are listed with their language so you can link them or keep one. <strong>Weglot<\/strong>, <strong>GTranslate<\/strong> and <strong>TranslatePress<\/strong> translate on the fly and never duplicate media, <strong>WPGlobus<\/strong> keeps every language in the same post, and <strong>MultilingualPress<\/strong> uses one media library per site, each scanned on its own: nothing to configure with them.<\/p>\n\n<p>Once the library is scanned, every copy carries a red <strong>Duplicate file<\/strong> badge in the Media Library grid and a <strong>Duplicate<\/strong> warning in the attachment details listing every copy of the group, with a link to the Duplicates page. The <strong>Duplicate Upload Alert<\/strong> (on by default, switch in Settings &gt; Optimizations) adds a notice in the uploader the moment you upload a copy of an existing image. Nothing is blocked.<\/p>\n\n<p>Bonus for the ALT Audit: identical files sharing the same ALT text are no longer reported as <strong>Duplicated ALT<\/strong>, and neither are the language versions of one media created by WPML, Polylang or Bogo. That was never an ALT problem, it was a duplicate file or a translation.<\/p>\n\n\n\n<h4>Native Media Library (Media &gt; Library)<\/h4>\n\n<p>See ALT health <strong>where you already work<\/strong>: Filikod adds <strong>ALT Status<\/strong> badges directly in <strong>Media &gt; Library<\/strong>, in both list and grid views.<\/p>\n\n<ul>\n<li><strong>List view<\/strong>: a dedicated <strong>ALT Status<\/strong> column with one badge per issue, or a green <strong>Alt: OK<\/strong> when everything is fine<\/li>\n<li><strong>Grid view<\/strong>: badges as an overlay on each thumbnail so you can scan your entire library at a glance<\/li>\n<li><strong>Attachment details<\/strong>: an <strong>ALT Status<\/strong> field that updates live as you type, so you see the result before saving<\/li>\n<\/ul>\n\n<p>Multiple badges can appear on the same image when several issues apply. The cache refreshes automatically whenever ALT text is changed anywhere in WordPress.<\/p>\n\n\n\n<h4>Optional Automation<\/h4>\n\n<p>For teams who need to process large volumes, Filikod includes optional automation tools, all disabled by default:<\/p>\n\n<ul>\n<li>Generate ALT from filename (only for images that have no ALT yet)<\/li>\n<li>Remove special characters from ALT text (slashes, dashes, underscores)<\/li>\n<li>Remove title attribute from images (reduces redundancy, improves accessibility)<\/li>\n<li>Bulk process your entire existing media library in one click<\/li>\n<\/ul>\n\n<p>Execution order is always enforced: generate ALT from filename, clean special characters, then remove title. Predictable. Consistent. Always yours to control.<\/p>\n\n\n\n<h4>How Filikod Compares<\/h4>\n\n<p>Most ALT text plugins do one thing: auto-generate ALT on upload, often using a paid credit system.<\/p>\n\n<p>Filikod is an ALT audit and bulk management system. It works on your existing library, gives you a measurable quality score, and lets you fix issues at scale with full editorial control.<\/p>\n\n<p>What only Filikod does:<\/p>\n\n<ul>\n<li>ALT Quality Score (0 to 100%) across your entire library<\/li>\n<li><strong>ALT Status badges in the native Media Library<\/strong> (list column, grid overlay, attachment details) with live updates after save<\/li>\n<li>Detects generic ALT values like \"photo\", \"image\", \"logo\"<\/li>\n<li>Detects duplicated ALT text reused across multiple images<\/li>\n<li>Detects ALT text that is too short to be useful<\/li>\n<li>Bulk filtering by issue type (missing, generic, short, duplicated)<\/li>\n<li><strong>Detects duplicate images<\/strong> (exact copies uploaded more than once) with their usage context, without deleting anything<\/li>\n<li>Works on images already in your media library<\/li>\n<li>No external API, no credits, no subscription required<\/li>\n<li>Full editorial control: you write and validate every ALT text<\/li>\n<\/ul>\n\n<p>If you want full visibility and control over your ALT text quality at scale, Filikod is exactly that.<\/p>\n\n\n\n<h4>Compatibility<\/h4>\n\n<ul>\n<li>Works with any theme<\/li>\n<li>Compatible with Elementor, Divi, Gutenberg, WPBakery and most major page builders<\/li>\n<li>Single site and multisite supported<\/li>\n<li>Multilingual: Polylang, WPML, Bogo (translation links respected by the duplicate detection), Weglot, GTranslate, TranslatePress, WPGlobus, MultilingualPress<\/li>\n<li>No external services required, runs entirely inside WordPress<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/filikod.com\/\">Learn more at filikod.com<\/a><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install from <strong>Plugins &gt; Add New<\/strong> (search \"Filikod\") or upload the plugin zip manually<\/li>\n<li>Activate Filikod<\/li>\n<li>Go to <strong>Filikod &gt; Dashboard<\/strong> to see your ALT Quality Score<\/li>\n<li>Go to <strong>Filikod &gt; ALT Audit<\/strong> to find and fix issues by type<\/li>\n<li>Open <strong>Media &gt; Library<\/strong> to see <strong>ALT Status<\/strong> in list or grid view, and in each image's attachment details<\/li>\n<li>Configure optional automation in <strong>Filikod &gt; Settings<\/strong><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20filikod%20generate%20alt%20text%20automatically%3F\"><h3>Does Filikod generate ALT text automatically?<\/h3><\/dt>\n<dd><p>Yes, but it is optional and filename-based. Filikod generates ALT from the image filename only for images that have no ALT text yet. Its core strength is structured ALT audit and bulk management, so you always stay in control of your content.<\/p><\/dd>\n<dt id=\"does%20filikod%20use%20ai%20to%20write%20alt%20text%3F\"><h3>Does Filikod use AI to write ALT text?<\/h3><\/dt>\n<dd><p>Not currently. ALT generation is based on the image filename. The core philosophy of Filikod is editorial control: you decide what each image means in context. Filikod gives you the visibility and tools to write accurate ALT yourself, or to review and validate what automation produces.<\/p><\/dd>\n<dt id=\"how%20is%20filikod%20different%20from%20image%20attributes%20pro%20or%20bialty%3F\"><h3>How is Filikod different from Image Attributes Pro or BIALTY?<\/h3><\/dt>\n<dd><p>Image Attributes Pro and similar filename-based plugins set ALT text automatically from the filename. They do not audit your existing library, detect generic or duplicated ALT, or give you a quality score. Filikod gives you a structured audit across your entire media library and the tools to fix issues in bulk, including images uploaded before you installed the plugin.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20images%20already%20in%20my%20media%20library%3F\"><h3>Does it work on images already in my media library?<\/h3><\/dt>\n<dd><p>Yes. Filikod scans and processes your entire existing media library, including images uploaded before installation. You can run a bulk process from the Settings page at any time.<\/p><\/dd>\n<dt id=\"does%20filikod%20modify%20my%20image%20files%3F\"><h3>Does Filikod modify my image files?<\/h3><\/dt>\n<dd><p><strong>Not by default.<\/strong> All ALT features (audit, score, bulk editing, badges) only change the <code>_wp_attachment_image_alt<\/code> meta in WordPress and never touch your binary image files.<\/p>\n\n<p>The only exception is the optional <strong>Automatic Image Resizing<\/strong> feature (Settings &gt; Optimizations, disabled by default). When you enable it, images wider than your maximum width are resized and <strong>the original file is replaced by the resized version<\/strong>. This is not reversible, so make sure you have a backup before running it on your existing library.<\/p><\/dd>\n<dt id=\"what%20is%20the%20alt%20quality%20score%3F\"><h3>What is the ALT Quality Score?<\/h3><\/dt>\n<dd><p>It is a score from 0 to 100% that reflects the overall ALT text health of your media library. It takes into account the proportion of images with missing, generic, too-short, and duplicated ALT attributes. It gives you a single measurable number you can track and improve over time, like an SEO or accessibility health metric.<\/p><\/dd>\n<dt id=\"can%20i%20bulk%20edit%20alt%20text%3F\"><h3>Can I bulk edit ALT text?<\/h3><\/dt>\n<dd><p>Yes. The ALT Audit page lets you filter images by issue type (missing, generic, short, duplicated) and edit ALT text inline. Changes save instantly without reloading the page.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20elementor%2C%20divi%2C%20wpbakery%2C%20and%20gutenberg%3F\"><h3>Is it compatible with Elementor, Divi, WPBakery, and Gutenberg?<\/h3><\/dt>\n<dd><p>Yes. Filikod manages ALT attributes directly in the WordPress media library, independently from your theme or page builder. Compatibility is universal.<\/p><\/dd>\n<dt id=\"does%20filikod%20detect%20duplicate%20images%3F\"><h3>Does Filikod detect duplicate images?<\/h3><\/dt>\n<dd><p>Yes. Filikod &gt; Duplicates lists every group of identical files (same md5 fingerprint) with thumbnail, size, upload date, usage context and ALT text, and flags the oldest copy. Run \"Scan library\" once to fingerprint your existing images; new uploads are fingerprinted automatically. Filikod only detects: it never deletes or merges files, you clean up from the Media Library when you are sure. Resized or re-encoded variants of a picture are different files and are not reported as duplicates. An optional Duplicate Upload Alert (Settings &gt; Optimizations) warns you right after uploading a copy of an existing image.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20multisite%20installations%3F\"><h3>Does it work on multisite installations?<\/h3><\/dt>\n<dd><p>Yes. Filikod supports WordPress multisite.<\/p><\/dd>\n<dt id=\"is%20filikod%20an%20image%20optimizer%20like%20smush%20or%20imagify%3F\"><h3>Is Filikod an image optimizer like Smush or Imagify?<\/h3><\/dt>\n<dd><p>No. Filikod does not compress images, convert to WebP, or serve images via CDN. It focuses entirely on ALT text quality: the audit, the score, and the tools to fix issues at scale. You can use a dedicated image optimizer alongside Filikod without any conflict.<\/p><\/dd>\n<dt id=\"where%20can%20i%20find%20documentation%3F\"><h3>Where can I find documentation?<\/h3><\/dt>\n<dd><p>Full documentation is available at <a href=\"https:\/\/filikod.com\/\">filikod.com<\/a>.<\/p>\n\n<\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li><strong>New \u2013 Duplicate image detection (Filikod &gt; Duplicates)<\/strong>: Filikod now fingerprints the original file of every image (md5, stored in the <code>_filikod_file_hash<\/code> post meta) and lists every group of exact copies uploaded more than once. Same layout as the ALT Audit: each copy shows its thumbnail, file name (with ID, dimensions, size and upload date), <strong>Context<\/strong> (where it is used), its ALT text, a <strong>Reference<\/strong> \/ <strong>Duplicate<\/strong> status (the reference being the oldest copy) and <strong>Edit<\/strong> \/ <strong>Library<\/strong> links. Groups are separated by a header line with the space that keeping a single copy would free. The scan controls sit at the top of the page. Fingerprints are computed automatically on upload and whenever the attachment metadata is regenerated (WordPress big-image scaling, Filikod resizer, image editor, Enable Media Replace, thumbnail regeneration), always from the original file when WordPress kept one, and back-filled for the existing library by a batched <strong>Scan library<\/strong> job (25 images per request, same engine as the other bulk jobs). <strong>Full rescan<\/strong> recomputes everything, for files replaced outside WordPress. Detection only: nothing is deleted or merged. Groups are cached for 15 minutes (<code>filikod_duplicate_groups_v1<\/code>) and invalidated on upload, deletion and fingerprint change. Perceptual near-duplicates (resized or re-encoded variants) are out of scope for this version.<\/li>\n<li><strong>New \u2013 Duplicate markers in the Media Library<\/strong>: once the library is scanned, every member of a duplicate group gets a red <strong>Duplicate file<\/strong> badge in the grid (under the ALT badges) and a <strong>Duplicate<\/strong> warning box in the attachment details, after the ALT Status field, listing every copy of the group (file name, ID, upload date, \"oldest\" and \"this file\" markers) with a single link to Filikod &gt; Duplicates, so you never bounce from one image to another. Data travels through <code>wp_prepare_attachment_for_js<\/code> (<code>filikod_duplicate_of<\/code>), resolved from the cached groups (no extra query per thumbnail).<\/li>\n<li><strong>New \u2013 Duplicate Upload Alert (on by default, switch in Settings &gt; Optimizations)<\/strong>: a dismissible notice in the uploader the moment an uploaded image carries the same fingerprint as an existing file, naming the older copy with a link. Hooks the <code>wp.Uploader<\/code> queue, so it works in the Media Library and in every editor media frame. Uploads are never blocked. New option <code>filikod_duplicate_upload_alert<\/code> (default <code>yes<\/code>), removed on uninstall.<\/li>\n<li><strong>Multilingual \u2013 translations are not duplicates<\/strong>: attachments linked as translations of each other count as one file in the duplicate groups, so a media translated in three languages is not a group of three. Supported: Polylang \/ Polylang Pro (<code>post_translations<\/code>), WPML with Media Translation (<code>post_attachment<\/code> element type), Bogo (<code>_original_post<\/code> meta). Groups are recomputed when translation links change. Unlinked copies are listed with their language (FR, EN...) on the Duplicates page and in the attachment details. Weglot, GTranslate, TranslatePress, WPGlobus and MultilingualPress need nothing: they never create a second attachment for the same file on the same site.<\/li>\n<li><strong>Fix \u2013 ALT Audit covers every language on WPML and Polylang sites<\/strong>: the attachment query behind the audit went through the admin language filter of WPML and Polylang, so on a site whose admin language switcher was set to one language, images of the other languages were missing from the audit and the score. The query now bypasses those filters (<code>suppress_filters<\/code>), matching the SQL counters used everywhere else in the plugin.<\/li>\n<li><strong>Fix \u2013 Duplicated ALT and media translations<\/strong>: the FR, EN and ES versions of one media (WPML Media Translation, Polylang media translation, Bogo) carrying the same ALT were reported as three duplicated ALTs. A translation set now counts as a single image for the duplicated-ALT rule, with or without a fingerprint scan. The translation map is loaded with one query per request (<code>icl_translations<\/code>, <code>post_translations<\/code>, <code>_original_post<\/code>), so large libraries are not slowed down. Duplicate index bumped to <code>filikod_alt_norm_counts_v3<\/code>.<\/li>\n<li><strong>Duplicates \u2013 SVG and ICO are fingerprinted too, broken attachments are reported<\/strong>: the scan covers every <code>image\/*<\/code> attachment by MIME type, so SVG logos (the most duplicated files on many sites) are detected. Attachments whose file is missing on disk are marked (<code>x:missing<\/code>) instead of being counted as \"still waiting\" forever; the scan block reports them and a <strong>Missing files<\/strong> tab lists them (expected path, context, ALT, links) so you can restore the file or delete the attachment; \"Scan library\" skips them and \"Full rescan\" retries them.<\/li>\n<li><strong>Dashboard \u2013 Duplicate images<\/strong>: new <strong>Library Overview<\/strong> counter with the number of redundant files, duplicate groups and wasted disk space, linking to the Duplicates page (or inviting you to run the first scan).<\/li>\n<li><strong>ALT Audit \u2013 identical files no longer count as Duplicated ALT<\/strong>: the same ALT text on two copies of the same file was reported as duplicated ALT and lowered the score, although it was a duplicate file, not an ALT mistake. Duplicate detection now counts distinct files (by fingerprint) per ALT text, so exact copies sharing one ALT are excluded, everywhere: ALT Audit tabs, Dashboard counters, Media Library badges and the live preview in the attachment modal. Images that have not been fingerprinted keep the previous behaviour. Audit cache bumped to <code>filikod_alt_audit_v6<\/code>, duplicate index to <code>filikod_alt_norm_counts_v2<\/code>.<\/li>\n<li><strong>Settings \u2013 title counter<\/strong>: the <strong>Remove Title Attribute<\/strong> card now shows how many images in the library still carry a title, so you see what the option will clear before enabling it. The counter refreshes after <strong>Process Existing Images<\/strong>.<\/li>\n<li><strong>Compatibility \u2013 WordPress 7.1.1<\/strong>: code audit against the 7.1.1 security and maintenance release (17 Core fixes, 11 security fixes, revised files in <code>wp-admin\/includes\/media.php<\/code>, <code>ajax-actions.php<\/code>, <code>plugin.php<\/code>, <code>post.php<\/code>, <code>formatting.php<\/code>, HTML API, REST comments, XML-RPC). The attachment finalize fix (#66056) and the media\/AJAX changes do not alter the hooks Filikod relies on (<code>attachment_fields_to_edit<\/code>, <code>attachment_fields_to_save<\/code>, <code>wp_prepare_attachment_for_js<\/code>, <code>add_attachment<\/code>, <code>wp_update_attachment_metadata<\/code>, <code>wp_check_filetype_and_ext<\/code>). No incompatibility found.<\/li>\n<li><strong>Uninstall<\/strong>: the <code>_filikod_file_hash<\/code> fingerprints (plugin cache, no editorial value) are removed on uninstall, on every site of a multisite network.<\/li>\n<li><strong>Public API<\/strong>: new class <code>Filikod_Duplicates<\/code> (<code>compute_hash()<\/code>, <code>hash_attachment()<\/code>, <code>get_hash()<\/code>, <code>identity_for_attachment()<\/code>, <code>get_groups_data()<\/code>, <code>get_summary()<\/code>), new helper <code>Filikod_Alt_Audit::counts_from_identity_map()<\/code>, new helper <code>Filikod_Media_Utils::count_images_with_title()<\/code>. <code>build_duplicate_map()<\/code> and <code>build_duplicate_map_with_alt_override()<\/code> keep their signature and return type.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li><strong>Compatibility \u2013 WordPress 7.1<\/strong>: full code audit against WordPress 7.1 (hooks, AJAX endpoints, Settings API, Media Library integration, PHP 8 patterns), already running on several 7.1 sites without issues. No incompatibility found; \"Tested up to\" bumped to 7.1 in the readme and the plugin header.<\/li>\n<li><strong>Code quality \u2013 Plugin Check compliance<\/strong>: resolved every warning reported by the official Plugin Check tool. Placeholder index.php files carried mixed line endings (multiple carriage returns per line, inherited from repeated CRLF conversions) and are now normalized to LF. Three phpcs annotations were separated from their target line by a blank line, which made them inoperative; they now sit next to the code they document (the two WP_DEBUG-gated error_log() calls in the SVG upload path and the direct database query used for batch image processing \u2014 all intentional and unchanged). No functional change.<\/li>\n<li><strong>Documentation<\/strong>: the 1.1.3 and 1.1.1 upgrade notices were shortened to fit the 300-character limit.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li><strong>Fix \u2013 deleted media no longer linger in the ALT Audit table<\/strong>: the audit results are cached for 15 minutes, and the cache was only invalidated when an ALT text changed \u2014 not when a media file was added to or deleted from the library. Images deleted from the Media Library could therefore keep showing up in the ALT Audit tabs (typically under <strong>Missing<\/strong>) until the cache expired, and on hosts with a persistent object cache they could linger even longer. The audit cache is now invalidated on <code>add_attachment<\/code> and <code>delete_attachment<\/code>, and as a safety net the audit table also skips any attachment that no longer exists when rendering the current page. Thanks to Patrick for the report.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li><strong>Generic ALT detection \u2013 filename-like single words<\/strong>: an ALT made of a single word containing digits (e.g. <em>\"Rggx5025\"<\/em>, <em>\"P1040233\"<\/em>, <em>\"A7R04512\"<\/em>) is now flagged as <strong>Generic<\/strong>. These values are camera or export filenames inherited as ALT text and carry no descriptive value, but random character strings could not be caught by the existing known-prefix patterns (<code>IMG_<\/code>, <code>DSC_<\/code>, \u2026) and slipped through as <strong>Alt: OK<\/strong>. Detection applies everywhere: ALT Audit tabs, Dashboard counters, and Media Library badges (list, grid, attachment details). The audit cache is bumped to <code>filikod_alt_audit_v5<\/code> so the new rule applies on first load after update.<\/li>\n<li><strong>Fix \u2013 ICO uploads no longer blocked<\/strong>: enabling the ICO file type in Settings &gt; File types now actually allows <code>.ico<\/code> uploads. WordPress performs a second MIME check against the real file content, and PHP detects <code>.ico<\/code> files as <code>image\/vnd.microsoft.icon<\/code> (not the declared <code>image\/x-icon<\/code>), so uploads were rejected \"for security reasons\" even with the option enabled. A dedicated <code>wp_check_filetype_and_ext<\/code> handler now accepts the real-world ICO MIME variants, including PNG-based favicons renamed to <code>.ico<\/code>.<\/li>\n<li><strong>Fix \u2013 SVG sanitizer no longer strips <code>viewBox<\/code>, gradients and clip paths<\/strong>: element and attribute names were lowercased before being compared to a case-sensitive whitelist containing camelCase entries. As a result, <code>viewBox<\/code>, <code>preserveAspectRatio<\/code>, <code>&lt;linearGradient&gt;<\/code>, <code>&lt;radialGradient&gt;<\/code> and <code>&lt;clipPath&gt;<\/code> were removed from every sanitized SVG, breaking responsive scaling and visual rendering. Both sides of the comparison are now normalized, and gradient presentation attributes (<code>offset<\/code>, <code>stop-color<\/code>, <code>stop-opacity<\/code>, <code>gradientUnits<\/code>, <code>gradientTransform<\/code>, <code>spreadMethod<\/code>) are now whitelisted so preserved gradients actually render. The security posture (script\/event-handler\/external-reference removal) is unchanged.<\/li>\n<li><strong>Security \u2013 sideloaded SVG files are now sanitized<\/strong>: the SVG sanitization chain only covered regular uploads (<code>wp_handle_upload<\/code>). Files brought in through sideloading (<code>media_sideload_image()<\/code>, the WordPress importer, third-party plugins) bypassed sanitization entirely. The <code>wp_handle_sideload_prefilter<\/code> and <code>wp_handle_sideload<\/code> hooks now run the exact same validation and sanitization chain.<\/li>\n<li><strong>Fix \u2013 the <code>filikod-resized<\/code> image size is now registered<\/strong>: it was hooked on <code>after_setup_theme<\/code>, which fires before the plugin's classes are instantiated on <code>init<\/code>, so the registration never ran. The size announced for page builders (Elementor, Gutenberg) now actually exists.<\/li>\n<li><strong>Code quality \u2013 shared media utilities<\/strong>: the image-count query (previously duplicated in three classes) and the file-size formatter (duplicated in two) are now centralized in a single <code>Filikod_Media_Utils<\/code> class. No behavior change.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<p>\u2022 <strong>Security \u2013 SVGZ removed from optional file types<\/strong>: compressed SVG files (<code>.svgz<\/code>) could bypass the SVG sanitization chain, which only processes uncompressed <code>.svg<\/code> uploads. The SVGZ option has been removed from Settings &gt; File types; sites that had it enabled will no longer accept <code>.svgz<\/code> uploads. Regular <code>.svg<\/code> uploads are unaffected and remain fully sanitized. If you previously uploaded <code>.svgz<\/code> files, we recommend reviewing them and re-uploading as standard <code>.svg<\/code>.\n\u2022 <strong>Documentation \u2013 image files FAQ<\/strong>: the \"Does Filikod modify my image files?\" answer now explicitly states that the optional Automatic Image Resizing feature (disabled by default) replaces the original file with the resized version and is not reversible. All ALT features remain meta-only and never touch image files.<\/p>\n\n<h4>1.1.1<\/h4>\n\n<p>\u2022 <strong>AI-generated image detection (Generic ALT)<\/strong>: ALT text inherited from default AI export filenames is now flagged as <strong>Generic<\/strong> in the audit. Two new universal patterns cover the most common cases:\n  - <code>Gemini_Generated_Image_*<\/code> \u2192 e.g. <em>\"Gemini Generated Image i90nz7i90nz7\"<\/em>\n  - <code>ChatGPT Image *<\/code> \u2192 e.g. <em>\"ChatGPT Image Jul 7, 2024 at 02_30_00 PM\"<\/em>\n  These ALT values look meaningful but carry zero accessibility or SEO value, so Filikod now surfaces them in the <strong>Generic<\/strong> tab of the ALT Audit and in the <strong>Alt: Generic<\/strong> badge across the Media Library (list, grid, attachment details). Detection is applied to the normalized ALT, so casing, underscores, dashes and dates do not bypass the rule.\n\u2022 <strong>Audit cache<\/strong>: transient bumped to <code>filikod_alt_audit_v4<\/code> so the new detection rule applies immediately on first load after update; previous <code>v3<\/code> (and earlier) transients are explicitly cleared by <code>invalidate_cache()<\/code>.\n\u2022 <strong>Performance \u2013 Dashboard media stats<\/strong>: the Dashboard counters (total images, total size, optimized count, original\/optimized size) are now computed in a single batched loop and cached for 15 minutes (<code>filikod_media_size_stats_v1<\/code>). The cache is auto-invalidated on attachment add\/delete and after each automatic resize, removing repeated heavy queries on every Dashboard page load.\n\u2022 <strong>Security \u2013 ALT save endpoint<\/strong>: the AJAX endpoint <code>filikod_save_alt<\/code> now checks <code>current_user_can( 'edit_post', $attachment_id )<\/code> per attachment, verifies that the target is an actual image (<code>wp_attachment_is_image()<\/code>), and truncates ALT text longer than 1000 characters before saving.\n\u2022 <strong>Accessibility \u2013 SVG sanitizer<\/strong>: the strict SVG whitelist now allows <code>&lt;title&gt;<\/code>, <code>&lt;desc&gt;<\/code> and accessibility attributes (<code>role<\/code>, <code>aria-label<\/code>, <code>aria-labelledby<\/code>, <code>aria-describedby<\/code>, <code>aria-hidden<\/code>, <code>tabindex<\/code>, <code>preserveAspectRatio<\/code>). These elements are non-executable and required for WCAG-compliant inline SVG; the security posture against scripts, event handlers and external references is unchanged.\n\u2022 <strong>Settings UX<\/strong>: the <em>Maximum image width<\/em> setting now displays an explicit admin error notice when a value outside the supported range (100\u201310000 px) is submitted, instead of silently rejecting the input.\n\u2022 <strong>Multisite hygiene<\/strong>: the uninstall routine now also deletes per-site Filikod transients (<code>_transient_filikod_*<\/code> and their timeouts) on every sub-site of a multisite network, preventing orphaned cache entries after plugin removal.\n\u2022 <strong>Production log hygiene<\/strong>: non-critical <code>error_log()<\/code> calls in the SVG sanitization and image resizer paths are now gated behind <code>WP_DEBUG<\/code>, avoiding noise in production <code>debug.log<\/code> files.\n\u2022 <strong>Code cleanup<\/strong>: removed two dead-code paths (no-op rewrite-rule flush on <code>init<\/code>; SVG security headers hook that never fired because static SVG files bypass <code>template_redirect<\/code>). No user-visible behavior change.<\/p>\n\n<h4>1.1.0<\/h4>\n\n<p>\u2022 <strong>Detailed badge tooltips<\/strong>: every ALT badge (list view, grid overlay, modal, ALT Audit Issue column) now exposes a contextual <code>title<\/code> tooltip explaining the status and the recommended action (e.g. <em>\u201cALT text exceeds 125 characters. Long ALTs are poorly read by screen readers and dilute SEO signals\u2026\u201d<\/em>). Tooltips are translatable and parameterized with the actual character thresholds. A dotted underline (<code>cursor: help<\/code>) signals the tooltip on the Issue label\n\u2022 <strong>New issue: Too long ALT<\/strong>: detection of ALT text exceeding <strong>125 characters<\/strong> (after normalization). Dedicated tab on the ALT Audit page, dedicated count on the Dashboard, dedicated <strong>Alt: Too long<\/strong> badge in the Media Library (list, grid, modal). Score impact: <strong>70\/100<\/strong> (reported but less critical than duplicate, generic, too short, or missing)\n\u2022 <strong>Decorative action<\/strong>: mark an image as <strong>decorative<\/strong> (intentional <code>alt=\"\"<\/code> per WCAG). Decorative images are <strong>fully excluded from the ALT score<\/strong> (neither numerator nor denominator) so logos, dividers and purely visual icons stop dragging your score down. Dedicated <strong>Decorative<\/strong> column on the ALT Audit page with a <strong>toggle switch<\/strong> that auto-saves on change; dedicated <strong>Decorative<\/strong> tab to review and revert; dedicated <strong>Alt: Decorative<\/strong> badge in the Media Library\n\u2022 <strong>ALT Audit UI<\/strong>: decorative action moved out of the Action column into its own column with a toggle switch (auto-save on change, keyboard-accessible). The Action column now only holds the <strong>Save<\/strong> button for a cleaner row layout\n\u2022 <strong>Badge colors refresh<\/strong>: new palette for the Media Library ALT Status badges. <strong>Alt: Generic<\/strong> in amber (<code>#FFC736<\/code>) and <strong>Alt: Too short<\/strong> in teal (<code>#0DBB9C<\/code>) for clearer visual differentiation\n\u2022 <strong>Dashboard<\/strong>: two new counters, <strong>Too long<\/strong> and <strong>Decorative<\/strong>, both linking to the matching ALT Audit tab\n\u2022 <strong>Audit cache<\/strong>: transient bumped to <code>filikod_alt_audit_v3<\/code> (auto-rebuilt on first load); invalidation hooks now also listen to the new <code>_filikod_decorative<\/code> post meta\n\u2022 <strong>i18n<\/strong>: new translatable strings (<code>Too long<\/code>, <code>Decorative<\/code>, <code>Marked as decorative.<\/code>, <code>Image restored as a regular image, please add an ALT text.<\/code>, \"too long\" description with parameterized character threshold)\n\u2022 <strong>Public API<\/strong>: new helpers <code>Filikod_Alt_Audit::is_decorative()<\/code>, <code>Filikod_Alt_Audit::set_decorative()<\/code>, new constants <code>TOO_LONG_MIN_LEN<\/code>, <code>META_DECORATIVE<\/code>, <code>AUDIT_TRANSIENT<\/code>\n\u2022 <strong>Backwards compatibility<\/strong>: existing audit results still load; <code>collect_alt_issue_codes()<\/code> gains an optional fourth parameter <code>$is_decorative<\/code> defaulting to false<\/p>\n\n<h4>1.0.9<\/h4>\n\n<p>\u2022 <strong>ALT Status labels<\/strong>: badges in the native Media Library (list, grid, attachment details) now use an <strong>Alt:<\/strong> prefix on every status (e.g. <strong>Alt: OK<\/strong>, <strong>Alt: Duplicated<\/strong>, <strong>Alt: Missing<\/strong>) via a translatable <code>Alt: %s<\/code> string\n\u2022 <strong>OK badge<\/strong>: removed the checkmark character; the passing state reads <strong>Alt: OK<\/strong>\n\u2022 <strong>Attachment details modal<\/strong>: new stylesheet <code>media-modal-alt-status.css<\/code> enqueued <strong>after<\/strong> <code>media-views<\/code> (<code>wp_enqueue_media<\/code>) so the <strong>ALT Status<\/strong> label stays aligned with other field labels and with the badges, including under the <strong>900px<\/strong> responsive rules\n\u2022 <strong>Readme<\/strong>: description, screenshots captions, and changelog aligned with the above<\/p>\n\n<h4>1.0.8<\/h4>\n\n<p>\u2022 <strong>Native Media Library<\/strong>: <strong>ALT Status<\/strong> column in list view; badge overlay on grid thumbnails (top-left); <strong>ALT Status<\/strong> field in attachment details modal\/sidebar\n\u2022 <strong>Modal UX<\/strong>: ALT Status label aligned with badges; multiple issue badges on <strong>one horizontal row<\/strong> in attachment details (list column still stacks badges for readability)\n\u2022 <strong>Live updates<\/strong>: status refreshes after saving ALT text (AJAX save handlers) and while typing (server-side preview); dashboard and audit cache stay in sync when <code>_wp_attachment_image_alt<\/code> changes\n\u2022 <strong>Multi-issue badges<\/strong>: an image can show several tags at once (e.g. Generic + Too short + Duplicated) when multiple rules apply; single green <strong>Alt: OK<\/strong> when there are no issues\n\u2022 <strong>Reliability<\/strong>: audit transient cache key bumped (<code>filikod_alt_audit_v2<\/code>); normalized cache keys for object caches; <code>attachment_fields_to_save<\/code> ensures <code>image_alt<\/code> is persisted on <code>save-attachment-compat<\/code> like the classic uploader; invalidation hooks on post meta, attachment save, and related paths\n\u2022 <strong>Performance<\/strong>: cached global map of normalized ALT \u2192 occurrence count (<code>filikod_alt_norm_counts_v1<\/code>); duplicate preview in the media modal avoids scanning every attachment per request; full audit rebuild reuses that index\n\u2022 <strong>Admin JS<\/strong>: shared batch runner for accessibility and bulk jobs (<code>runFilikodBatchedJob<\/code>)\n\u2022 <strong>Documentation<\/strong>: FAQ and feature list updated; default behavior is ALT meta only, no image file changes<\/p>\n\n<h4>1.0.7<\/h4>\n\n<p>\u2022 Accessibility: \"Remove Title Attribute\" now works for new uploads (clears post_title after use); execution order enforced: generate ALT (from title then filename) \u2192 clean special chars \u2192 remove title (same order in bulk process)\n\u2022 ALT Audit page: Duplicated tab lists media sorted alphabetically by ALT so duplicates are grouped; saving an ALT in Duplicated tab reloads the list so media that are no longer duplicated disappear\n\u2022 Security &amp; coding standards: escaped outputs (menu icon via wp_localize_script; pagination printf), all variables in ALT audit view prefixed with filikod_ (PrefixAllGlobals)<\/p>\n\n<h4>1.0.6<\/h4>\n\n<p>\u2022 Readme and positioning update: ALT audit &amp; bulk management first\n\u2022 Clarified automation messaging (optional, controlled)\n\u2022 Improved \"Generic ALT\" detection with additional real-world patterns (e.g. device\/app filenames, placeholders, thumbnails)\n\u2022 Reduced false positives in generic ALT classification (better normalization and matching)<\/p>\n\n<h4>1.0.5<\/h4>\n\n<p>\u2022 Added content context column in ALT audit (see where each image is used)\n\u2022 Improved bulk ALT editing workflow\n\u2022 Enhanced admin interface clarity<\/p>\n\n<h4>1.0.4<\/h4>\n\n<p>\u2022 Fix audit score calculation\n\u2022 Adjusted description text<\/p>\n\n<h4>1.0.3<\/h4>\n\n<p>\u2022 Dashboard redesign with ALT Quality Score (0\u2013100%)\n\u2022 Multi-language generic ALT detection\n\u2022 Donut gauge visualization for ALT Score\n\u2022 Media Size Savings module and progress bars\n\u2022 New audit utilities and filters<\/p>\n\n<h4>1.0.2<\/h4>\n\n<p>\u2022 Improved dashboard readability\n\u2022 Added ALT coverage percentage\n\u2022 Clarified resize behavior messaging<\/p>\n\n<h4>1.0.0<\/h4>\n\n<p>\u2022 Initial public release\n\u2022 ALT automation (filename-based)\n\u2022 Title removal &amp; character cleanup\n\u2022 Bulk processing for existing images\n\u2022 Secure SVG sanitization\n\u2022 Optional extended file types\n\u2022 Modern tab-based dashboard<\/p>","raw_excerpt":"Audit your media library, get an ALT Quality Score (0\u2013100%), and fix missing, generic or duplicated ALT text in bulk. No external API required.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ko.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/264268","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ko.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ko.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ko.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=264268"}],"author":[{"embeddable":true,"href":"https:\/\/ko.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/lyode"}],"wp:attachment":[{"href":"https:\/\/ko.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=264268"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ko.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=264268"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ko.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=264268"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ko.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=264268"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ko.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=264268"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ko.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=264268"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}