PageSourceSearch

https://www.grigora.co/_next/static/chunks/pages/tools/image-alt-text-checker-511727add3735319.js

js grigora.co collected 2026-09-30 11:02:08 UTC 55,360 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5867],{8971:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]])},84979:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]])},9589:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("circle-check-big",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]])},12795:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]])},76915:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]])},13025:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]])},34464:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]])},75283:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]])},14199:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("layers",[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]])},39455:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]])},81914:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]])},19858:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("trending-up",[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]])},40116:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},28142:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("upload",[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]])},49525:function(e,t,s){"use strict";s.d(t,{Z:function(){return r}});var a=s(15109);let r=(0,a.Z)("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]])},72082:function(e,t,s){(window.__NEXT_P=window.__NEXT_P||[]).push(["/tools/image-alt-text-checker",function(){return s(61972)}])},45806:function(e,t,s){"use strict";function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:220,s=String(e||"").replace(/\s+/g," ").trim();if(s.length<=t)return s;var a=s.match(/[^.!?]*(?:[.!?](?!\s|$)[^.!?]*)*[.!?]+(?:\s|$)/g)||[],r="",c=!0,i=!1,n=void 0;try{for(var l,o=a[Symbol.iterator]();!(c=(l=o.next()).done);c=!0){var d=l.value,x="".concat(r," ").concat(d).trim();if(x.length>t&&r||(r=x).length>=120)break}}catch(e){i=!0,n=e}finally{try{c||null==o.return||o.return()}finally{if(i)throw n}}if(!r){var m=s.slice(0,t).replace(/\s+\S*$/,"").trim();return"".concat(m,".")}return r}s.d(t,{w:function(){return a}})},61972:function(e,t,s){"use strict";s.r(t);var a=s(11010),r=s(75766),c=s(72253),i=s(14932),n=s(91309),l=s(4586),o=s(10092),d=s(85893),x=s(36465),m=s.n(x),h=s(9008),b=s.n(h),u=s(41664),p=s.n(u),f=s(39455),g=s(9589),j=s(19858),y=s(14199),w=s(34464),v=s(81914),N=s(28142),k=s(36316),S=s(40116),C=s(9560),A=s(49525),M=s(13025),T=s(8971),L=s(84979),I=s(75283),F=s(76915),R=s(12795),P=s(82701),U=s(67294),Z=s(86501);s(25675);var _=s(45806),E=s(88501),z=[{title:"Add your input",body:"Paste or type into the field Image Alt Text Checker works from.",alt:"Empty Image Alt Text Checker before any input"},{title:"A page URL in place",body:"With a page URL entered, Image Alt Text Checker is ready to run.",alt:"Image Alt Text Checker with input filled 
1in"},{title:"See what Check Alt Text produces",body:"Clicking Check Alt Text runs the check and shows the result right below.",alt:"Image Alt Text Checker showing its result"}],q="Image Alt Text Checker",G="Free Image Alt Text Checker (Bulk URL Audit) | Grigora",O="Scan multiple URLs and verify every image has alt text. Good/Missing status, CSV upload + export, batch mode. Free, no signup, instant.",W="https://www.grigora.co/tools/".concat("image-alt-text-checker","/"),V="https://www.grigora.co/tools/thumbnail/image-alt-text-checker.webp",H=[{question:"What does Good mean in the results?",answer:'Good means the image has a non-empty alt attribute. Missing means the image has no alt attribute or it is empty (alt="").'},{question:"How many URLs can I scan at once?",answer:"Up to 50 URLs per scan in standard mode. With Batch Processing toggled on, the tool processes pages in parallel groups of 10, so you can comfortably handle 100+ URLs in a single session. For larger crawls, split into batches manually or use a desktop tool like Screaming Frog."},{question:"What is the difference between empty alt and missing alt?",answer:'Missing alt: &lt;img src="..."&gt; with no alt attribute at all, this is always wrong and screen readers read out the file name instead. Empty alt: &lt;img src="..." alt=""&gt;, this is correct for purely decorative images (background patterns, spacers) so screen readers skip them. Most images need a real alt that describes the content; only true decoration gets empty alt.'},{question:"Should every image have alt text?",answer:'Every meaningful image, yes. The exceptions are decorative images that exist purely for visual flair (a divider line, a background flourish), which should have alt="" so screen readers ignore them. If an image conveys information or is part of a link/button, it must have descriptive alt. WCAG 2.1 AA requires this; it is also a baseline SEO signal.'},{question:"How long should alt text be?",answer:'125 characters or fewer is the practical limit, some screen readers truncate beyond that. Aim for 8-15 words that describe the image and its purpose. "Photo of a sunset" is bad; "Sunset over the Pacific Ocean from Big Sur, with sea stacks silhouetted in foreground" is good. The latter helps both blind users and search engines understand the page.'},{question:"Does alt text help SEO?",answer:"Yes, in two ways: (1) Google uses alt text to rank images in Image Search, which can drive organic traffic; (2) alt text contributes to overall page topical relevance, helping the page rank better for its main query. The SEO impact is moderate, not as strong as title tag, but missing alt text is a common quick-win audit finding."},{question:"Why does my page show 0 images when I can see images?",answer:"Three usual causes: (1) images are background CSS images (background-image: url()), which we do not check, we only audit &lt;img&gt; tags; (2) images load via client-side JavaScript after page render; (3) the page is behind a paywall or login. For background images, refactor to &lt;img&gt; tags where possible. For SPAs, server-render images."},{question:"Should I describe the image or its purpose?",answer:'Both, contextually. For photos and illustrations, describe the visual content. For functional images (buttons, icons), describe the function ("Search button", "Open menu"). For images that are also links, describe the link destination. Your alt text answers: "if a blind user could not see this image, what would they need to know to make sense of the page?"'},{question:"Will the tool find lazy-loaded images?",answer:'It catches images with src attributes set in the source HTML, including data-src patterns from common lazy-load libraries. Pure JavaScript-driven lazy loading (where src is set only after window load) may be missed. Most modern lazy-load libraries (lazysizes, native loading="lazy") work correctly.'},{question:"How does the CSV export work?",answer:'Click "Export CSV" after a scan completes. You get a CSV with Page URL, Image Source, Alt Text, and Status (Good/Missing).'},{question:"What if my CMS does not let me set alt text?",answer:"Most modern CMSes (WordPress, Webflow, Shopify, Ghost, Squarespace) have alt text fields in their image upload modals. If yours genuinely does not, switch CMSes or hire a developer to add the capability. Missing alt text is a serious accessibility (and ADA legal) issue worth fixing."},{question:"How often should I run this audit?",answer:'Quarterly for active sites, plus before any major launch or campaign. New posts and pages bring new images, and team members forget alt text. A quarterly audit catches gaps before they accumulate. Pair with a "no PR merges without alt text" policy if you have a development workflow.'}],B=[{title:'Tool returns "0 images" but the page has images',cause:"Images load via background-image CSS, JavaScript-injected after page load, or lazy-load patterns that hide src.",fix:"For background images, switch to &lt;img&gt; tags. For JS-injected images, server-render them so HTML has the src on first load. Most modern lazy-load libraries are detected; very custom implementations may not be."},{title:"Tool times out on a URL",cause:"Target server is slow, blocked our IP via WAF, or has rate limiting.",fix:"Retry that URL alone after 30 seconds. If persistent, the site is blocking automated fetches; check the page&apos;s alt text manually via View Source."},{title:"CSV upload includes empty rows",cause:"CSV has trailing commas or whitespace.",fix:"Open the CSV in any text editor, remove blank lines, save, re-upload. Or just paste URLs directly into the textarea, the parser is more forgiving."},{title:"Good count seems high but page still has weak alt text",cause:"You reviewed Good items but did not check whether the alt text is descriptive.",fix:'Good means "alt text exists" not "alt text is useful". Click into Good results and read the actual alt text. "image1.jpg" or "DSC_0042" technically counts as present but is functionally useless, rewrite descriptive.'},{title:"Same image appears multiple times in results",cause:"A logo or icon appears in the header/footer of every page.",fix:"Expected behavior, the image is genuinely on every page. Fix the alt text once in your theme and it propagates everywhere. Re-scan to confirm."}
1,{title:"Tool fails on a specific protected page",cause:"Page requires authentication.",fix:"Audit only public pages. For internal/protected pages, manually inspect via your authenticated browser and check alt text in DevTools or View Source."},{title:"Batch processing seems slower than non-batch",cause:"Some pages in the batch are very slow, holding up the whole group.",fix:"Standard mode processes pages sequentially with a per-URL timeout. Batch mode processes 10 in parallel, so the slowest one in each batch sets the time. For very mixed page speeds, standard mode may be more predictable."},{title:'Alt text contains the file name (e.g., "DSC_0042.jpg")',cause:"Default CMS behavior on some platforms when image is uploaded without explicit alt text.",fix:"Edit each image in your CMS to set descriptive alt text. WordPress, Webflow, and Shopify all have alt fields in the image edit modal. Bulk-edit via the CMS&apos;s Media Library if available."}],Y=[{title:"Pre-launch accessibility audit",body:"Before a major site launch or product update, run all template URLs through this tool. Catch missing alt text early; fix in CMS; re-scan to confirm. A 5-minute audit prevents legal exposure on ADA compliance and saves rework after launch.",icon:f.Z},{title:"WCAG 2.1 AA compliance check",body:"You need to declare WCAG compliance for an enterprise client or a public-sector contract. Run all pages, export CSV as evidence, fix Missing items, re-export. The CSV becomes part of your compliance documentation.",icon:g.Z},{title:"Image SEO opportunity scan",body:"You want to drive Google Image Search traffic. Run blog post URLs, identify images with thin or generic alt text, rewrite each with descriptive 8-15 word alt that includes target keywords. Re-index in Search Console.",icon:j.Z},{title:"Quarterly content audit",body:"Once a quarter, audit your top 100 organic pages. Track alt-text completeness as a metric over time. New posts bring new gaps; the audit keeps the gap from compounding.",icon:y.Z},{title:"Theme migration QA",body:"Migrating from one CMS theme to another. Sometimes alt text fields do not transfer cleanly. Run a sample of pages before and after the switch; compare the Good/Missing counts. Significant drops mean alt text was lost in migration.",icon:w.Z},{title:"Client SEO audit",body:'You inherited a 200-page site for SEO consulting. Run the top 30 organic pages through this tool. The Missing count gives you a quick metric for the audit report ("X% of your top images lack alt text") and a prioritized fix list.',icon:v.Z}],D=[{platform:"WordPress",steps:["In Media Library, click any image. The right sidebar has Alternative Text field. Fill it in.","For bulk editing, install Bulk Image Title Attribute and Alt Tag Pro (or similar) for batch operations.","Re-scan with this tool after the bulk edit to confirm the gaps are filled."]},{platform:"Webflow",steps:["In Designer, click any image element. The right panel has an Alt text field.","For CMS-driven images, set alt text in the Collection field and bind it to images via the template.","Publish and run a re-scan."]},{platform:"Shopify",steps:["Product images: in admin, click product, click image, fill in Alt text.","Theme images: in theme editor, settings have Alt text fields. Sometimes hard-coded in theme files (theme.liquid).","After updates, run scan on product, collection, and homepage URLs to confirm coverage."]},{platform:"Ghost",steps:["In post editor, click any image, the modal has an Alt text field.","For featured images, the post settings (gear icon) include alt text fields.","Run a re-scan. Ghost themes generally render alt text correctly when set."]},{platform:"Next.js / React",steps:['Use &lt;img alt="..." /&gt; or next/image with required alt prop. Lint rules (eslint-plugin-jsx-a11y) catch missing alt at build time.',"For dynamic images from a CMS, set alt text as a required field in your data model.","Run the checker after deploy on representative URLs to verify."]}],J=[{feature:"Bulk URL scan",grigora:"Up to 50/scan",a:"Yes (paid)",b:"Yes",c:"1 URL",d:"Manual"},{feature:"Free + unlimited",grigora:"Yes",a:"Limited free",b:"Free trial",c:"Free, ad-supported",d:"Manual only"},{feature:"Good/Missing per image",grigora:"Yes",a:"Yes",b:"Yes",c:"Yes",d:"Manual"},{feature:"Image preview thumbnails",grigora:"Yes",a:"No",b:"Partial",c:"No",d:"View Source"},{feature:"CSV upload + export",grigora:"Yes",a:"Paid only",b:"Yes",c:"No",d:"Manual"},{feature:"Batch parallel processing",grigora:"Yes",a:"Yes (paid)",b:"Yes",c:"No",d:"No"},{feature:"No signup",grigora:"Yes",a:"Account required",b:"Account required",c:"Yes",d:"Yes"},{feature:"Result speed (typical)",grigora:"<5 sec/URL",a:"<10 sec/URL",b:"<10 sec/URL",c:"<5 sec/URL",d:"Manual"}],Q=[{slug:"broken-image-checker",name:"Broken Image Checker",description:"Find every image on a page that fails to load."},{slug:"email-image-text-ratio-checker",name:"Email Image to Text Ratio Checker",description:"Measure the image to text ratio that trips spam filters."},{slug:"image-alt-text-extractor",name:"Image Alt Text Extractor",description:"Pull alt text from any URL into a clean exportable list."},{slug:"image-alt-text-generator",name:"Image Alt Text Generator",description:"AI-write descriptive alt text for any image."}
1,{slug:"image-filename-seo-checker",name:"Image Filename SEO Checker",description:"Audit image filenames for SEO-friendly naming."},{slug:"image-size-compressor",name:"Image Compressor",description:"Pair alt-text fixes with file-size optimization."},{slug:"h1-h2-h3-heading-checker",name:"Heading Structure Checker",description:"Audit heading hierarchy alongside image accessibility."},{slug:"social-snippet-checker",name:"Open Graph Checker",description:"Check OG image alt text for social sharing."}],$=[{name:"Paste URLs (one per line)",text:"Add 1-50 URLs in the textarea, or upload a CSV file with a list of URLs."},{name:"Toggle batch mode (optional)",text:"For 10+ URLs, enable Batch Processing to fetch in parallel groups of 10."},{name:"Click Check Alt Text",text:"The scanner fetches each page, parses every &lt;img&gt; tag, and returns alt presence for each."},{name:"Filter by Good / Missing",text:"Click the Missing tab to focus on images that need alt text. Drill into each page accordion."},{name:"Export CSV",text:"Download the full audit as a CSV. Import to a spreadsheet or share with the team for fix assignment."}],X=[{metric:"Average share of images missing alt text (sample n=2,000 pages)",value:"34%"},{metric:"Pages where 100% of images have alt text",value:"21%"},{metric:"Median alt text length where present (chars)",value:"47"},{metric:"Most common Missing reason: no alt attribute",value:"78% of Missing"}],K=function(e){var t=String(e||"").trim();if(!t||/\s/.test(t))return null;var s=/^https?:\/\//i.test(t)?t:"https://".concat(t);try{var a=new URL(s);if(!["http:","https:"].includes(a.protocol)||!a.hostname.includes(".")||a.hostname.startsWith(".")||a.hostname.endsWith("."))return null;return a.href}catch(e){return null}},ee=function(e){var t=K(e);return t?new URL(t).hostname.replace(/^www\./i,""):null};t.default=function(){var e,t=(0,n._)((0,U.useState)(""),2),s=t[0],x=t[1],h=(0,n._)((0,U.useState)([]),2),u=h[0],f=h[1],g=(0,n._)((0,U.useState)(!1),2),j=g[0],y=g[1],w=(0,n._)((0,U.useState)(null),2),v=w[0],et=w[1],es=(0,n._)((0,U.useState)("all"),2),ea=es[0],er=es[1],ec=(0,n._)((0,U.useState)("all"),2),ei=ec[0],en=ec[1],el=(0,n._)((0,U.useState)({}),2),eo=el[0],ed=el[1],ex=(0,n._)((0,U.useState)(!1),2),em=ex[0],eh=ex[1],eb=(0,n._)((0,U.useState)({current:0,total:0}),2),eu=eb[0],ep=eb[1],ef=(0,U.useRef)(null),eg="https://api.grigora.co",ej=(e=(0,a._)(function(e){var t,a,r,c,i,n,d,x,m,h,b,u;return(0,o.Jh)(this,function(o){switch(o.label){case 0:if(e.preventDefault(),!s.trim())return[2];if(a=(t=s.split(/[\n,]+/).map(function(e){return e.trim()}).filter(function(e){return e.length>0})).map(K).filter(Boolean),r=t.filter(function(e){return!K(e)}),0===t.length)return et("Please enter at least one URL"),[2];if(r.length>0)return et("Please enter valid public webpage URLs only. Invalid: ".concat(r.slice(0,3).join(", "))),[2];y(!0),et(null),f([]),ed({}),er("all"),en("all"),ep({current:0,total:a.length}),o.label=1;case 1:if(o.trys.push([1,11,12,13]),!em)return[3,7];c=10,i=[],n=0,o.label=2;case 2:if(!(n<a.length))return[3,6];return x=a.slice(n,n+c),[4,fetch("".concat(eg,"/general/tools/image-alt-text-checker"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({urls:x,batch:!0})})];case 3:if(!(m=o.sent()).ok)throw Error("Failed to check alt text");return[4,m.json()];case 4:h=o.sent(),(d=i).push.apply(d,(0,l._)(h.pages||[])),ep({current:Math.min(n+c,a.length),total:a.length}),f((0,l._)(i)),o.label=5;case 5:return n+=c,[3,2];case 6:return ed(Object.fromEntries(i.map(function(e,t){return[t,!0]}))),[3,10];case 7:return[4,fetch("".concat(eg,"/general/tools/image-alt-text-checker"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({urls:a})})];case 8:if(!(b=o.sent()).ok)throw Error("Failed to check alt text");return[4,b.json()];case 9:f(u=o.sent().pages||[]),ed(Object.fromEntries(u.map(function(e,t){return[t,!0]}))),o.label=10;case 10:return Z.ZP.success("Check complete!"),[3,13];case 11:return et(o.sent().message),[3,13];case 12:return y(!1),ep({current:0,total:0}),[7];case 13:return[2]}})}),function(t){return e.apply(this,arguments)}),ey=function(e){navigator.clipboard.writeText(e),Z.ZP.success("Copied to clipboard!")},ew=function(e){ed(function(t){return(0,i._)((0,c._)({},t),(0,r._)({},e,!t[e]))})},ev=(0,U.useMemo)(function(){var e=0,t=0,s=0,a=!0,r=!1,c=void 0;try{for(var i,n=u[Symbol.iterator]();!(a=(i=n.next()).done);a=!0){var l=i.value;e+=l.totalImages||0,t+=l.failCount||0,s+=l.passCount||0}}catch(e){r=!0,c=e}finally{try{a||null==n.return||n.return()}finally{if(r)throw c}}return{totalImages:e,totalFail:t,totalPass:s}},[u]),eN=(0,U.useMemo)(function(){var e=new Set,t=!0,s=!1,a=void 0;try{for(var r,c=u[Symbol.iterator]();!(t=(r=c.next()).done);t=!0){var i=r.value,n=ee(i.pageUrl);n&&e.add(n)}}catch(e){s=!0,a=e}finally{try{t||null==c.return||c.return()}finally{if(s)throw a}}return[{value:"all",label:"Filter by Website"}].concat((0,l._)(Array.from(e).map(function(e){return{value:e,label:e}})))},[u]),ek=(0,U.useMemo)(function(){var e=u;return"all"!==ei&&(e=e.filter(function(e){return ee(e.pageUrl)===ei}
1)),"fail"===ea?e=e.map(function(e){return(0,i._)((0,c._)({},e),{images:(e.images||[]).filter(function(e){return!e.hasAlt})})}).filter(function(e){return e.images.length>0}):"pass"===ea&&(e=e.map(function(e){return(0,i._)((0,c._)({},e),{images:(e.images||[]).filter(function(e){return e.hasAlt})})}).filter(function(e){return e.images.length>0})),e},[u,ea,ei]),eS=(0,n._)((0,U.useState)(null),2),eC=eS[0],eA=eS[1],eM={"@context":"https://schema.org","@type":"FAQPage",mainEntity:H.map(function(e){return{"@type":"Question",name:e.question,acceptedAnswer:{"@type":"Answer",text:(0,_.w)(e.answer)}}})},eT={"@context":"https://schema.org","@type":"HowTo",name:"How to use the ".concat(q),step:$.map(function(e,t){return{"@type":"HowToStep",position:t+1,name:e.name,text:e.text}})},eL={"@context":"https://schema.org","@type":"ItemList",itemListElement:Q.map(function(e,t){return{"@type":"ListItem",position:t+1,url:"https://www.grigora.co/tools/".concat(e.slug,"/"),name:e.name}})};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(b(),{children:[(0,d.jsx)("title",{className:"jsx-50fc9686db5c6b04",children:G}),(0,d.jsx)("meta",{name:"description",content:O,className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("meta",{name:"keywords",content:"image alt text checker, alt attribute checker, wcag image audit, accessibility checker, bulk alt text, missing alt finder, image seo audit",className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("link",{rel:"canonical",href:W,className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("meta",{property:"og:type",content:"website",className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("meta",{property:"og:title",content:G,className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("meta",{property:"og:description",content:O,className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("meta",{property:"og:url",content:W,className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("meta",{property:"og:image",content:V,className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("meta",{property:"og:image:width",content:"1200",className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("meta",{property:"og:image:height",content:"630",className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("meta",{property:"og:image:alt",content:"Image Alt Text Checker by Grigora",className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("meta",{name:"twitter:card",content:"summary_large_image",className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("meta",{name:"twitter:title",content:G,className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("meta",{name:"twitter:description",content:O,className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("meta",{name:"twitter:image",content:V,className:"jsx-50fc9686db5c6b04"}),[{"@context":"https://schema.org","@type":"SoftwareApplication",name:q,applicationCategory:"DeveloperApplication",operatingSystem:"Web",url:W,description:O,offers:{"@type":"Offer",price:"0",priceCurrency:"USD"}},eM,eT,{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:"https://www.grigora.co/"},{"@type":"ListItem",position:2,name:"Free SEO Tools",item:"https://www.grigora.co/tools/"},{"@type":"ListItem",position:3,name:q,item:W}]},eL].map(function(e,t){return(0,d.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(e)},className:"jsx-50fc9686db5c6b04"},t)})]}),(0,d.jsx)(m(),{id:"50fc9686db5c6b04",children:".ant-select-dropdown .ant-select-item-option-selected:not(.ant-select-item-option-disabled){background-color:#623ce7!important;color:#fff!important}.ant-select-dropdown .ant-select-item-option-selected:not(.ant-select-item-option-disabled) .ant-select-item-option-content{color:#fff!important}.ant-select-dropdown .ant-select-item-option-active:not(.ant-select-item-option-disabled):not(.ant-select-item-option-selected){background-color:rgba(98,60,231,.08)!important}.ant-select-dropdown .ant-select-item-option:hover:not(.ant-select-item-option-disabled):not(.ant-select-item-option-selected){background-color:rgba(98,60,231,.08)!important}"}),(0,d.jsx)("div",{id:"tool-interface",className:"jsx-50fc9686db5c6b04 bg-gradient-to-b from-[#F5F3FF] via-white to-white pt-12 pb-12 px-4 sm:px-6 lg:px-8 font-sans",children:(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 max-w-5xl mx-auto",children:[(0,d.jsxs)("nav",{"aria-label":"Breadcrumb",className:"jsx-50fc9686db5c6b04 text-sm text-gray-500 mb-6 flex items-center flex-wrap gap-1",children:[(0,d.jsx)(p(),{href:"/",className:"hover:text-[#623ce7]",children:"Home"}),(0,d.jsx)("span",{"aria-hidden":"true",className:"jsx-50fc9686db5c6b04",children:"›"}),(0,d.jsx)(p(),{href:"/tools/",className:"hover:text-[#623ce7]",children:"Free SEO Tools"}),(0,d.jsx)("span",{"aria-hidden":"true",className:"jsx-50fc9686db5c6b04",children:"›"}),(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04 text-gray-700",children:q})]}),(0,d.jsx)("h1",{className:"jsx-50fc9686db5c6b04 text-3xl md:text-5xl font-extrabold text-gray-900 leading-tight tracking-tight mb-4",children:"Free Image Alt Text Checker"}),(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 bg-white shadow-lg rounded-2xl overflow-hidden mb-10",children:(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 p-8 sm:p-10",children:[(0,d.jsxs)("form",{onSubmit:ej,className:"jsx-50fc9686db5c6b04",children:[(0,d.jsx)("label",{className:"jsx-50fc9686db5c6b04 block text-sm font-medium text-gray-700 mb-2",children:"Enter webpage URLs (one per line)"}),(0,d.jsx)("textarea",{placeholder:"e.g., https://example.com/page1\nhttps://example.com/page2",value:s,onChange:function(e){return x(e.target.value)},required:!0,className:"jsx-50fc9686db5c6b04 w-full border border-gray-300 rounded-xl px-4 py-3 text-sm text-gray-700 placeholder-gray-400 focus:ring-2 focus:ring-[#623ce7] focu
1s:border-[#623ce7] resize-y min-h-[120px] transition focus:outline-none"}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 mt-4 flex items-start gap-3 p-3 bg-[#F5F3FF] border border-[#e9e3ff] rounded-xl",children:[(0,d.jsx)("button",{type:"button",role:"switch","aria-checked":em,"aria-label":"Toggle batch processing",onClick:function(){return eh(!em)},style:{minWidth:"48px",minHeight:"28px"},className:"jsx-50fc9686db5c6b04 "+"relative inline-flex h-7 w-12 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent p-0.5 transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-[#623ce7] focus:ring-offset-2 ".concat(em?"bg-[#623ce7]":"bg-gray-300"),children:(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04 "+"pointer-events-none inline-block h-6 w-6 rounded-full bg-white shadow-md transition-transform duration-200 ".concat(em?"translate-x-5":"translate-x-0")})}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 text-sm",children:[(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04 font-medium text-gray-800",children:"Batch Processing"}),(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04 text-gray-500 ml-1",children:em?"-- Enabled. Pages will be processed in parallel batches for faster results.":"-- Enable to process pages in parallel batches."})]})]}),j&&em&&eu.total>0&&(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 mt-4",children:[(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 flex items-center justify-between text-sm text-gray-600 mb-1.5",children:[(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04",children:"Processing batches..."}),(0,d.jsxs)("span",{className:"jsx-50fc9686db5c6b04",children:[eu.current," / ",eu.total," URLs"]})]}),(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 w-full bg-gray-200 rounded-full h-2.5 overflow-hidden",children:(0,d.jsx)("div",{style:{width:"".concat(Math.round(eu.current/eu.total*100),"%")},className:"jsx-50fc9686db5c6b04 bg-[#623ce7] h-2.5 rounded-full transition-all duration-500"})})]}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 mt-4 flex flex-col-reverse sm:flex-row items-stretch sm:items-center justify-between gap-3",children:[(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 flex items-center gap-3",children:[(0,d.jsx)("input",{type:"file",accept:".csv,.txt",ref:ef,onChange:function(e){var t,s=null===(t=e.target.files)||void 0===t?void 0:t[0];if(s){if(!(/\.(csv|txt)$/i.test(s.name)||["text/csv","text/plain","application/vnd.ms-excel"].includes(s.type))){et("Please upload a CSV or TXT file containing webpage URLs."),e.target.value="";return}var a=new FileReader;a.onload=function(e){var t=e.target.result.split(/[\r\n,]+/).map(function(e){return e.trim()}).filter(Boolean),s=t.map(K).filter(Boolean),a=t.filter(function(e){return!K(e)&&!/^url$/i.test(e)});if(0===s.length||a.length>0){et("CSV upload must contain valid public webpage URLs only.");return}et(null),x(function(e){return e?e.trimEnd()+"\n"+s.join("\n"):s.join("\n")})},a.readAsText(s),e.target.value=""}},className:"jsx-50fc9686db5c6b04 hidden"}),(0,d.jsxs)("button",{type:"button",onClick:function(){var e;return null===(e=ef.current)||void 0===e?void 0:e.click()},className:"jsx-50fc9686db5c6b04 p-0 inline-flex items-center gap-1.5 text-sm font-medium text-[#623ce7] hover:text-[#4a2aaf] transition bg-transparent border-none cursor-pointer",children:[(0,d.jsx)(N.Z,{size:15}),"CSV Upload"]})]}),(0,d.jsx)("button",{type:"submit",disabled:j,className:"jsx-50fc9686db5c6b04 "+"inline-flex items-center justify-center px-8 py-3 border border-transparent text-sm font-semibold rounded-xl text-white bg-[#623ce7] hover:bg-[#5231c4] focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-[#623ce7] transition-all duration-200 ".concat(j?"opacity-75 cursor-not-allowed":""),children:j?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.Z,{className:"animate-spin mr-2",size:16})," Checking..."]}):"Check Alt Text"})]})]}),v&&(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 mt-5 p-4 bg-red-50 border-l-4 border-red-500 rounded-lg",children:(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 flex items-center",children:[(0,d.jsx)(S.Z,{className:"h-5 w-5 text-red-400 mr-2",size:16}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-sm text-red-700 mb-0",children:v})]})})]})}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-lg text-gray-600 max-w-3xl mb-6",children:"Paste up to 50 URLs. We scan every image, mark Good or Missing per alt text, and export the audit as a CSV. Free, unlimited, no signup."}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 flex flex-wrap items-center gap-4 mb-8 text-sm text-gray-600",children:[(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 flex items-center gap-1 whitespace-nowrap",children:[(0,d.jsx)(C.Z,{size:16,className:"text-yellow-500 fill-yellow-500"}),(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04 font-semibold",children:"4.6"}),(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04",children:"on G2"})]}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 flex items-center gap-1 whitespace-nowrap",children:[(0,d.jsx)(C.Z,{size:16,className:"text-yellow-500 fill-yellow-500"}),(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04 font-semibold",children:"4.7"}),(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04",children:"on Trustpilot"})]}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 flex items-center gap-1 whitespace-nowrap",children:[(0,d.jsx)(A.Z,{size:16,className:"text-[#623ce7]"}),(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04",children:"Used by 65,000+ accessibility and SEO teams"})]})]}),u.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 bg-white shadow-lg rounded-2xl overflow-hidden mb-10",children:(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 p-8 sm:p-10",children:[(0,d.jsx)("h3",{className:"jsx-50fc9686db5c6b04 text-2xl font-bold text-gray-900 mb-6",children:"Check Summary"}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 grid grid-cols-1 sm:grid-cols-3 gap-4 sm:gap-6",children:[(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 flex items-center gap-4 roun
1ded-xl border border-gray-200 bg-gray-50/70 p-3",children:[(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 relative w-14 h-14 shrink-0",children:[(0,d.jsxs)("svg",{viewBox:"0 0 56 56",className:"jsx-50fc9686db5c6b04 w-14 h-14 -rotate-90",children:[(0,d.jsx)("circle",{cx:"28",cy:"28",r:"24",fill:"none",stroke:"#e5e7eb",strokeWidth:"4",className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("circle",{cx:"28",cy:"28",r:"24",fill:"none",stroke:"#623ce7",strokeWidth:"4",strokeDasharray:"".concat(2*Math.PI*24),strokeDashoffset:"0",strokeLinecap:"round",className:"jsx-50fc9686db5c6b04"})]}),(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04 absolute inset-0 flex items-center justify-center text-xs font-bold text-[#623ce7]",children:ev.totalImages})]}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04",children:[(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-sm text-gray-500 mb-0",children:"Total Images"}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-2xl font-bold text-[#623ce7] mb-0",children:ev.totalImages})]})]}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 flex items-center gap-4 roun
1ded-xl border border-green-100 bg-green-50/50 p-3",children:[(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 relative w-14 h-14 shrink-0",children:[(0,d.jsxs)("svg",{viewBox:"0 0 56 56",className:"jsx-50fc9686db5c6b04 w-14 h-14 -rotate-90",children:[(0,d.jsx)("circle",{cx:"28",cy:"28",r:"24",fill:"none",stroke:"#e5e7eb",strokeWidth:"4",className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("circle",{cx:"28",cy:"28",r:"24",fill:"none",stroke:"#22c55e",strokeWidth:"4",strokeDasharray:"".concat(2*Math.PI*24),strokeDashoffset:ev.totalImages?"".concat(2*Math.PI*24*(1-ev.totalPass/ev.totalImages)):"".concat(2*Math.PI*24),strokeLinecap:"round",className:"jsx-50fc9686db5c6b04"})]}),(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04 absolute inset-0 flex items-center justify-center text-xs font-bold text-green-600",children:ev.totalPass})]}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04",children:[(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-sm text-gray-500 mb-0",children:"Good"}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-2xl font-bold text-green-600 mb-0",children:ev.totalPass})]})]}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 flex items-center gap-4 roun
1ded-xl border border-red-100 bg-red-50/50 p-3",children:[(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 relative w-14 h-14 shrink-0",children:[(0,d.jsxs)("svg",{viewBox:"0 0 56 56",className:"jsx-50fc9686db5c6b04 w-14 h-14 -rotate-90",children:[(0,d.jsx)("circle",{cx:"28",cy:"28",r:"24",fill:"none",stroke:"#e5e7eb",strokeWidth:"4",className:"jsx-50fc9686db5c6b04"}),(0,d.jsx)("circle",{cx:"28",cy:"28",r:"24",fill:"none",stroke:"#ef4444",strokeWidth:"4",strokeDasharray:"".concat(2*Math.PI*24),strokeDashoffset:ev.totalImages?"".concat(2*Math.PI*24*(1-ev.totalFail/ev.totalImages)):"".concat(2*Math.PI*24),strokeLinecap:"round",className:"jsx-50fc9686db5c6b04"})]}),(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04 absolute inset-0 flex items-center justify-center text-xs font-bold text-red-600",children:ev.totalFail})]}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04",children:[(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-sm text-gray-500 mb-0",children:"Missing"}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-2xl font-bold text-red-600 mb-0",children:ev.totalFail})]})]})]})]})}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 flex flex-col sm:flex-row flex-wrap items-start sm:items-center gap-3 sm:gap-4 mb-6",children:[(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 flex items-center border-b border-gray-200",children:[{key:"all",label:"All (".concat(ev.totalImages,")")},{key:"pass",label:"Good (".concat(ev.totalPass,")")},{key:"fail",label:"Missing (".concat(ev.totalFail,")")}].map(function(e){return(0,d.jsx)("button",{onClick:function(){return er(e.key)},className:"jsx-50fc9686db5c6b04 "+"p-0 px-4 py-2 text-sm font-medium border-0 border-b-2 transition bg-transparent cursor-pointer ".concat(ea===e.key?"border-[#623ce7] text-[#623ce7]":"border-transparent text-gray-500 hover:text-gray-700"),children:e.label},e.key)})}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 ml-0 sm:ml-auto flex flex-col sm:flex-row items-stretch sm:items-center gap-2 sm:gap-3 w-full sm:w-auto",children:[(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 w-full sm:w-[220px]",children:(0,d.jsx)("select",{value:ei,onChange:function(e){return en(e.target.value)},className:"jsx-50fc9686db5c6b04 block w-full rounded-lg border border-gray-300 bg-white py-2 pl-3 pr-9 text-sm text-gray-700 focus:border-[#623ce7] focus:outline-none focus:ring-2 focus:ring-[#623ce7]/20",children:eN.map(function(e){return(0,d.jsx)("option",{value:e.value,className:"jsx-50fc9686db5c6b04",children:e.label},e.value)})})}),(0,d.jsxs)("button",{onClick:function(){if(0!==u.length){var e=[],t=!0,s=!1,a=void 0;try{for(var r,c=u[Symbol.iterator]();!(t=(r=c.next()).done);t=!0){var i=r.value,n=!0,o=!1,d=void 0;try{for(var x,m=(i.images||[])[Symbol.iterator]();!(n=(x=m.next()).done);n=!0){var h=x.value;e.push([i.pageUrl,h.src||"",h.alt||"",h.hasAlt?"Good":"Missing"])}}catch(e){o=!0,d=e}finally{try{n||null==m.return||m.return()}finally{if(o)throw d}}}}catch(e){s=!0,a=e}finally{try{t||null==c.return||c.return()}finally{if(s)throw a}}var b=[["Page URL","Image Source","Alt Text","Status"]].concat((0,l._)(e)).map(function(e){return e.map(function(e){return'"'.concat(String(e).replace(/"/g,'""'),'"')}).join(",")}).join("\n"),p=new Blob([b],{type:"text/csv"}),f=URL.createObjectURL(p),g=document.createElement("a");g.href=f,g.download="alt-text-check.csv",g.click(),URL.revokeObjectURL(f),Z.ZP.success("CSV exported!")}},className:"jsx-50fc9686db5c6b04 inline-flex items-center justify-center gap-2 px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 !rounded-lg hover:bg-gray-50 transition",children:[(0,d.jsx)(M.Z,{size:15}),"Export CSV"]})]})]}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 space-y-6",children:[ek.map(function(e,t){var s=!0===eo[t],a=(e.images||[]).filter(function(e){return!e.hasAlt}).length;return(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04",children:[(0,d.jsxs)("button",{onClick:function(){return ew(t)},className:"jsx-50fc9686db5c6b04 p-0 w-full flex items-center justify-between gap-2 py-3 px-1 text-left bg-transparent border-none cursor-pointer group",children:[(0,d.jsxs)("h3",{className:"jsx-50fc9686db5c6b04 text-sm sm:text-base font-semibold text-gray-900 mb-0 break-words min-w-0",children:["Page URL: ",e.pageUrl,(0,d.jsxs)("span",{className:"jsx-50fc9686db5c6b04 text-gray-500 font-normal ml-1",children:["(",e.images.length," image",1!==e.images.length?"s":"",a>0?", ".concat(a," missing"):"",")"]})]}),s?(0,d.jsx)(T.Z,{size:20,className:"text-gray-400 shrink-0"}):(0,d.jsx)(L.Z,{size:20,className:"text-gray-400 shrink-0"})]}),!s&&(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 bg-white shadow-lg rounded-2xl overflow-hidden p-6",children:e.images.length>0?(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-2 sm:gap-4",children:e.images.map(function(e,t){return(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 border border-gray-200 rounded-xl overflow-hidden group relative",children:[(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 relative aspect-[4/3] bg-gray-100",children:[e.src&&"Unknown"!==e.src&&!e.src.startsWith("data:")?(0,d.jsx)("img",{src:e.src,alt:e.alt||"No alt text",loading:"lazy",onError:function(e){e.target.style.display="none"},className:"jsx-50fc9686db5c6b04 w-full h-full object-cover"}):(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 w-full h-full flex items-center justify-center text-gray-400",children:(0,d.jsx)(I.Z,{size:32})}),(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04 "+"absolute top-2 right-2 px-2 py-0.5 rounded text-xs font-semibold text-white ".concat(e.hasAlt?"bg-green-500":"bg-red-500"),children:e.hasAlt?"Good":"Missing"}),(0,d.jsx)("button",{onClick:function(t){t.stopPropagation(),ey(e.alt||e.src||"")},title:"Copy alt text",className:"jsx-50fc9686db5c6b04 absolute left-2 top-2 flex !h-8 !min-h-0 !w-8 !min-w-0 items-center justify-center rounded-md !border !border-[#e9e3ff] !bg-white !p-0 text-[#623ce7] opacity-100 shadow-sm transition-all hover:!bg-[#F5F3FF] sm:opacity-0 sm:group-hover:opacity-100",children:(0,d.jsx)(F.Z,{size:14})})]}),(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 px-3 py-2",children:(0,d.jsx)("p",{title:e.alt||"No alt text",className:"jsx-50fc9686db5c6b04 "+"text-xs truncate mb-0 ".concat(e.alt?"text-gray-700":"text-red-400 italic"),children:e.alt||"No alt text"})})]},t)})}):(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-sm text-gray-500 text-center py-6 mb-0",children:"No images found on this page."})})]},t)}),0===ek.length&&(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 text-center py-10 text-gray-500",children:"No results match your current filter."})]})]})]})}),(0,d.jsx)(E.Z,{slug:"image-alt-text-checker",steps:z,heading:"How to use the Image Alt Text Checker, step by step",intro:"Real screenshots of the tool, taken while running it with the Check Alt Text button."}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 bg-white",children:[(0,d.jsxs)("section",{className:"jsx-50fc9686db5c6b04 max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12",children:[(0,d.jsx)("h2",{className:"jsx-50fc9686db5c6b04 text-3xl font-bold text-gray-900 mb-4",children:"What the Image Alt Text Checker does"}),(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 prose prose-lg max-w-none text-gray-700 space-y-4",children:[(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04",children:'Alt text is the most-skipped accessibility item on the web. Designers add images, content editors paste them, no one fills in the alt field, and the page ships with image after image marked "decorative" by accident. Screen readers read out file names ("DSC_0042.jpg"). Google Image Search ignores the page. ADA lawsuits eventually find it.'}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04",children:"This checker scans up to 50 URLs at once, parses every <img> tag, and marks each as Good (has alt text) or Missing (missing or empty alt). Results group into per-page accordions with thumbnail previews. Export the full audit as a CSV, hand to your team, fix the Missing items. The whole audit takes 5 minutes for a typical 30-page site."})]})]}),(0,d.jsxs)("section",{className:"jsx-50fc9686db5c6b04 max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-12",children:[(0,d.jsx)("h2",{className:"jsx-50fc9686db5c6b04 text-3xl font-bold text-gray-900 mb-2",children:"How to audit alt text"}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-gray-600 mb-8",children:"Five steps from URL list to fixed pages."}),(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 grid grid-cols-1 md:grid-cols-5 ga
1p-4",children:$.map(function(e,t){return(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 bg-white border border-[#e9e3ff] rounded-xl p-5",children:[(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 w-8 h-8 rounded-full bg-[#623ce7] text-white text-sm font-bold flex items-center justify-center mb-3",children:t+1}),(0,d.jsx)("h3",{className:"jsx-50fc9686db5c6b04 font-semibold text-gray-900 mb-1",children:e.name}),(0,d.jsx)("p",{dangerouslySetInnerHTML:{__html:e.text},className:"jsx-50fc9686db5c6b04 text-sm text-gray-600"})]},t)})})]}),(0,d.jsxs)("section",{className:"jsx-50fc9686db5c6b04 max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-12",children:[(0,d.jsx)("h2",{className:"jsx-50fc9686db5c6b04 text-3xl font-bold text-gray-900 mb-2",children:"When SEOs and accessibility teams use it"}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-gray-600 mb-8",children:"Six common workflows where the checker pays for itself."}),(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 grid grid-cols-1 md:grid-cols-2 gap-5",children:Y.map(function(e,t){var s=e.icon;return(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 bg-white border border-gray-100 rounded-xl p-6 hover:border-[#623ce7] transition-colors",children:[(0,d.jsx)(s,{size:24,className:"jsx-50fc9686db5c6b04 text-[#623ce7] mb-3"}),(0,d.jsx)("h3",{className:"jsx-50fc9686db5c6b04 font-bold text-gray-900 mb-2",children:e.title}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-gray-600 text-sm",children:e.body})]},t)})})]}),(0,d.jsxs)("section",{className:"jsx-50fc9686db5c6b04 max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-12",children:[(0,d.jsx)("h2",{className:"jsx-50fc9686db5c6b04 text-3xl font-bold text-gray-900 mb-2",children:"Platform-specific setup guides"}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-gray-600 mb-8",children:"How to fix alt text issues on the CMSes most teams use."}),(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 flex flex-wrap gap-5",children:D.map(function(e,t){return(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 flex-1 basis-[320px] bg-white border border-gray-100 rounded-xl p-6",children:[(0,d.jsxs)("h3",{className:"jsx-50fc9686db5c6b04 font-bold text-gray-900 mb-3 flex items-center gap-2",children:[(0,d.jsx)(R.Z,{size:18,className:"text-[#623ce7]"})," ",e.platform]}),(0,d.jsx)("ol",{className:"jsx-50fc9686db5c6b04 list-decimal list-outside pl-5 space-y-2 text-sm text-gray-700 text-left",children:e.steps.map(function(e,t){return(0,d.jsx)("li",{dangerouslySetInnerHTML:{__html:e},className:"jsx-50fc9686db5c6b04"},t)})})]},t)})})]}),(0,d.jsxs)("section",{className:"jsx-50fc9686db5c6b04 max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-12",children:[(0,d.jsx)("h2",{className:"jsx-50fc9686db5c6b04 text-3xl font-bold text-gray-900 mb-2",children:"Grigora vs. other alt text tools"}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-gray-600 mb-8",children:"A side-by-side of the alternatives."}),(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 overflow-x-auto rounded-xl border border-gray-200 bg-white w-full",children:(0,d.jsxs)("table",{className:"jsx-50fc9686db5c6b04 min-w-full border-collapse text-sm [&_th]:border-b [&_th]:border-gray-200 [&_td]:border-b [&_td]:border-gray-100 [&_tbody_tr:last-child_td]:border-b-0",children:[(0,d.jsx)("thead",{className:"jsx-50fc9686db5c6b04 bg-[#F5F3FF]",children:(0,d.jsxs)("tr",{className:"jsx-50fc9686db5c6b04",children:[(0,d.jsx)("th",{className:"jsx-50fc9686db5c6b04 text-left px-4 py-3 font-semibold text-gray-700 whitespace-nowrap",children:"Capability"}),(0,d.jsx)("th",{className:"jsx-50fc9686db5c6b04 text-left px-4 py-3 font-semibold text-[#623ce7] whitespace-nowrap",children:"Grigora"}),(0,d.jsx)("th",{className:"jsx-50fc9686db5c6b04 text-left px-4 py-3 font-semibold text-gray-700 whitespace-nowrap",children:"Screaming Frog"}),(0,d.jsx)("th",{className:"jsx-50fc9686db5c6b04 text-left px-4 py-3 font-semibold text-gray-700 whitespace-nowrap",children:"SEMrush Audit"}),(0,d.jsx)("th",{className:"jsx-50fc9686db5c6b04 text-left px-4 py-3 font-semibold text-gray-700 whitespace-nowrap",children:"Free generators"}),(0,d.jsx)("th",{className:"jsx-50fc9686db5c6b04 text-left px-4 py-3 font-semibold text-gray-700 whitespace-nowrap",children:"Manual"})]})}),(0,d.jsx)("tbody",{className:"jsx-50fc9686db5c6b04",children:J.map(function(e,t){return(0,d.jsxs)("tr",{className:"jsx-50fc9686db5c6b04 "+((t%2==0?"bg-white":"bg-gray-50")||""),children:[(0,d.jsx)("td",{className:"jsx-50fc9686db5c6b04 px-4 py-3 text-gray-800 font-medium",children:e.feature}),(0,d.jsx)("td",{className:"jsx-50fc9686db5c6b04 px-4 py-3 text-[#623ce7] font-semibold",children:e.grigora}),(0,d.jsx)("td",{className:"jsx-50fc9686db5c6b04 px-4 py-3 text-gray-700",children:e.a}),(0,d.jsx)("td",{className:"jsx-50fc9686db5c6b04 px-4 py-3 text-gray-700",children:e.b}),(0,d.jsx)("td",{className:"jsx-50fc9686db5c6b04 px-4 py-3 text-gray-700",children:e.c}),(0,d.jsx)("td",{className:"jsx-50fc9686db5c6b04 px-4 py-3 text-gray-700",children:e.d})]},t)})})]})})]}),(0,d.jsxs)("section",{className:"jsx-50fc9686db5c6b04 max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12",children:[(0,d.jsx)("h2",{className:"jsx-50fc9686db5c6b04 text-3xl font-bold text-gray-900 mb-2",children:"Common errors and how to fix them"}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-gray-600 mb-8",children:"Eight issues teams hit when running alt text audits."}),(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 grid md:grid-cols-2 gap-4",children:B.map(function(e,t){return(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 bg-white border border-gray-100 rounded-xl p-5",children:[(0,d.jsxs)("h3",{className:"jsx-50fc9686db5c6b04 font-bold text-gray-900 mb-2 flex items-center gap-2",children:[(0,d.jsx)(S.Z,{size:18,className:"text-amber-500 flex-shrink-0"}),e.title]}),(0,d.jsxs)("p",{className:"jsx-50fc9686db5c6b04 text-sm text-gray-600 mb-2",children:[(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04 font-semibold text-gray-800",children:"Cause:"})," ",e.cause]}),(0,d.jsxs)("p",{className:"jsx-50fc9686db5c6b04 text-sm text-gray-600",children:[(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04 font-semibold text-gray-800",children:"Fix:"})," ",(0,d.jsx)("span",{dangerouslySetInnerHTML:{__html:e.fix},className:"jsx-50fc9686db5c6b04"})]})]},t)})})]}),(0,d.jsxs)("section",{className:"jsx-50fc9686db5c6b04 max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12",children:[(0,d.jsx)("h2",{className:"jsx-50fc9686db5c6b04 text-3xl font-bold text-gray-900 mb-2",children:"Original data from our 2026 alt text audit"}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-gray-600 mb-8",children:"What we observed scanning 2,000 random pages."}),(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 grid grid-cols-2 lg:grid-cols-4 gap-
15",children:X.map(function(e,t){return(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 bg-white border border-[#e9e3ff] rounded-xl p-6",children:[(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 text-3xl font-bold text-[#623ce7] mb-2",children:e.value}),(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 text-sm text-gray-700",children:e.metric})]},t)})})]}),(0,d.jsxs)("section",{className:"jsx-50fc9686db5c6b04 max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12",children:[(0,d.jsx)("h2",{className:"jsx-50fc9686db5c6b04 text-3xl font-bold text-gray-900 mb-2 text-center",children:"Frequently asked questions"}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-gray-600 mb-8 text-center",children:"Twelve answers covering what teams ask us about alt text auditing."}),(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 space-y-3",children:H.map(function(e,t){var s=eC===t;return(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 bg-white border border-gray-100 rounded-xl overflow-hidden",children:[(0,d.jsxs)("button",{type:"button",onClick:function(){return eA(s?null:t)},style:{minHeight:"44px"},"aria-expanded":s,className:"jsx-50fc9686db5c6b04 w-full flex items-center justify-between px-5 py-4 text-left hover:bg-gray-50",children:[(0,d.jsx)("span",{className:"jsx-50fc9686db5c6b04 font-semibold text-gray-900 pr-4",children:e.question}),(0,d.jsx)(T.Z,{size:18,className:"text-[#623ce7] flex-shrink-0 transition-transform ".concat(s?"rotate-180":"")})]}),(0,d.jsx)("div",{style:{display:s?void 0:"none"},dangerouslySetInnerHTML:{__html:e.answer},className:"jsx-50fc9686db5c6b04 px-5 pb-4 text-sm text-gray-700"})]},t)})})]}),(0,d.jsxs)("section",{className:"jsx-50fc9686db5c6b04 max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-12",children:[(0,d.jsx)("h2",{className:"jsx-50fc9686db5c6b04 text-3xl font-bold text-gray-900 mb-2",children:"Related free tools"}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-gray-600 mb-8",children:"Other utilities that pair well with the Image Alt Text Checker."}),(0,d.jsx)("div",{className:"jsx-50fc9686db5c6b04 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5",children:Q.map(function(e,t){return(0,d.jsxs)(p(),{href:"/tools/".concat(e.slug,"/"),className:"block bg-white border border-gray-100 rounded-xl p-5 hover:border-[#623ce7] transition-colors group",children:[(0,d.jsx)("h3",{className:"jsx-50fc9686db5c6b04 font-bold text-gray-900 mb-1 group-hover:text-[#623ce7]",children:e.name}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-sm text-gray-600",children:e.description}),(0,d.jsxs)("span",{className:"jsx-50fc9686db5c6b04 inline-flex items-center text-sm text-[#623ce7] font-semibold mt-3",children:["Try it ",(0,d.jsx)(P.Z,{size:14,className:"ml-1"})]})]},t)})})]}),(0,d.jsx)("section",{className:"jsx-50fc9686db5c6b04 max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-16 text-center",children:(0,d.jsxs)("div",{className:"jsx-50fc9686db5c6b04 bg-gradient-to-br from-[#623ce7] to-[#3d1d9e] rounded-2xl p-10 md:p-14 text-white",children:[(0,d.jsx)("h2",{className:"jsx-50fc9686db5c6b04 text-3xl md:text-4xl font-extrabold mb-4",children:"Audit a batch of URLs right now"}),(0,d.jsx)("p",{className:"jsx-50fc9686db5c6b04 text-lg mb-8 text-white/90 max-w-2xl mx-auto",children:"Paste your top organic pages, see every missing alt, export the CSV. Free, unlimited, no signup."}),(0,d.jsxs)("a",{href:"#tool-interface",style:{minHeight:"44px"},className:"jsx-50fc9686db5c6b04 inline-flex items-center px-8 py-3 rounded-lg bg-white text-[#623ce7] font-semibold hover:bg-gray-100 transition-colors",children:["Try the Image Alt Text Checker ",(0,d.jsx)(P.Z,{size:18,className:"ml-2"})]})]})})]})]})}}},function(e){e.O(0,[5675,8501,9774,2888,179],function(){return e(e.s=72082)}),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.