{"id":36567,"date":"2025-01-13T07:00:00","date_gmt":"2025-01-13T15:00:00","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=36567"},"modified":"2025-04-16T10:34:03","modified_gmt":"2025-04-16T17:34:03","slug":"website-accessibility-alt-text-generation","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation","title":{"rendered":"Enhancing Your Website\u2019s Accessibility with Cloudinary\u2019s Alt Text Generation"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>According to the World Health Organization (WHO), <a href=\"https:\/\/www.who.int\/news-room\/fact-sheets\/detail\/blindness-and-visual-impairment\">at least 2.2 billion people worldwide have a vision impairment<\/a> and <a href=\"https:\/\/www.thelancet.com\/journals\/langlo\/article\/PIIS2214-109X(20)30425-3\/fulltext\">43.3 million people were estimated to be blind in 2020<\/a>. That is a lot of people who might not be able to use your app or website if you don\u2019t make it accessible to them.<\/p>\n<p>To make your website more accessible for <a href=\"https:\/\/www.w3.org\/WAI\/tutorials\/images\/#why-is-this-important\">people who use screen readers or speech input software, and even those with images turned off because of slow internet connections<\/a>, is to add alt text to your images. Alt text is a short description of the image that should convey the same information as the image itself. That way, people who can\u2019t see the image can still understand its context.<\/p>\n<p>Cloudinary helps automate the tedious task of adding alt text to your images. You set it up once, and your screen reader users will be able to enjoy everything your website has to offer.<\/p>\n<p>The solution leverages the <a href=\"https:\/\/cloudinary.com\/documentation\/cloudinary_ai_content_analysis_addon#ai_based_image_captioning\">Cloudinary AI Content Analysis<\/a> add-on in <a href=\"https:\/\/home.mediaflows.cloudinary.com\/\">Cloudinary MediaFlows<\/a>. And the best part is that you don\u2019t need to be a developer to set this up. So let\u2019s get started!<\/p>\n<h2>The Setup<\/h2>\n<p>First, of course, you need a Cloudinary account. If you don\u2019t have one yet, you can <a href=\"https:\/\/cloudinary.com\/users\/register_free\">sign up for free<\/a>. After you log in, you can set up the automated alt text generation in a few simple steps:<\/p>\n<h3>1. Activate the AI Content Analysis Add-on<\/h3>\n<p>In the Cloudinary Console, click the <strong>Add-on Marketplace<\/strong> icon (shaped like a puzzle piece) near the bottom of the left sidebar:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1736880428\/blog-Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation-1.png\" alt=\"Cloudinary Console sidebar with the Addon Marketplace icon hovered\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"313\" height=\"300\"\/><\/p>\n<p>Then, click the <strong>AI Content Analysis<\/strong> add-on card:<\/p>\n<p>That should take you to the add-on\u2019s page. There, you can click the <strong>Install Add-on<\/strong> button, which will activate the free plan of the add-on for your account, allowing you to generate alt text for up to 500 images per month:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1736880428\/blog-Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation-2.png\" alt=\"AI Content Analysis addon page in the Cloudinary Console with an arrow pointing to the \u201cInstall Add-on\u201d button\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"409\" height=\"382\"\/><\/p>\n<h4>Option 1: on_success<\/h4>\n<p>The on_success parameter allows you to update an asset using custom JavaScript that is executed after the upload to Cloudinary is completed. This can be useful for adding tags, contextual metadata and structured metadata, depending on the results of using the detection and categorization add-ons, which are only available after the file has already been successfully uploaded.<\/p>\n<p>The on_success parameter accepts a string containing the JavaScript code to be executed. There are two variables that can be used within the context of the JavaScript code snippet as follows:<\/p>\n<ul>\n<li>\n<strong>event or e.<\/strong> An object that encapsulates all the incoming data as follows:<\/li>\n<li>\n<strong>upload_info.<\/strong> An object with all the resource info as it would be received in an upload response. For example, e.upload_info?.width returns the width of the uploaded resource.<\/li>\n<li>\n<strong>status.<\/strong> Either <code>success<\/code> or <code>failure<\/code>.<\/li>\n<li>\n<strong>current_asset.<\/strong> An object that references the asset and currently holds a single method:\n= update &#8211; the method to update that receives a hash of the data to update (data is replaced as a result of the update, not added to). The currently supported data fields include tags, context, and metadata.<\/li>\n<\/ul>\n<p>For example, to upload an asset and update its contextual metadata (context) with the caption returned from the Cloudinary AI Content Analysis add-on, and add the tag <code>autocaption<\/code>.<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">cloudinary.v2.uploader\n.upload(<span class=\"hljs-string\">\"user_photo.jpg\"<\/span>,\n  { <span class=\"hljs-attr\">detection<\/span>: <span class=\"hljs-string\">\"captioning\"<\/span>,\n    <span class=\"hljs-attr\">on_success<\/span>: <span class=\"hljs-string\">\"current_asset.update({tags: &#91;'autocaption'], context: {caption: e.upload_info?.info?.detection?.captioning?.data?.caption}})\"<\/span> })\n.then(<span class=\"hljs-function\"><span class=\"hljs-params\">result<\/span>=&gt;<\/span><span class=\"hljs-built_in\">console<\/span>.log(result));\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h4>Option 2: Create a MediaFlow<\/h4>\n<p>After you\u2019ve activated the AI Content Analysis add-on, you can create a MediaFlow that will automatically generate alt text for your images. In the Cloudinary Console, click the <strong>MediaFlows<\/strong> icon in the top section of the left sidebar:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1736880429\/blog-Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation-3.png\" alt=\"A screenshot of the Cloudinary Console sidebar with the Mediaflows icon hovered\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1765\" height=\"1291\"\/><\/p>\n<p>Then, in the MediaFlows dashboard, click the <strong>All Templates<\/strong> button:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1736880429\/blog-Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation-4.png\" alt=\"A screenshot of the Cloudinary Console MediaFlows dashboard with an arrow pointing to the \u201cAll Templates\u201d button\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"601\" height=\"394\"\/><\/p>\n<p>That should open a modal window listing all the available predefined MediaFlow templates. Choose the <strong>Media Management<\/strong> category from the left menu or scroll down until you find the \u201cAuto-generate alt text\u201d template:<\/p>\n<p>Hover over the <strong>Auto-generate alt text<\/strong> card and click the <strong>Use this template<\/strong> button that should appear:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1736880431\/blog-Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation-7.png\" alt=\"A screenshot of the Cloudinary Console MediaFlows templates modal window with an arrow pointing to the \u201cUse this template\u201d button on the \u201cAuto-generate alt text\u201d card\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"379\" height=\"312\"\/><\/p>\n<p>After that, you\u2019ll be taken to the MediaFlow editor, where the workflow is already set up for you. You can see that the first step is to the \u201cCloudinary Upload\u201d node, which should capture any uploaded media, then a conditional node that checks if the media is an image, then a node that logs the uploaded media, and then a node that generates the caption, and finally a node that updates the alt text with the generated caption and a node that logs the new caption.<\/p>\n<p>You can see the <strong>Run<\/strong> button in the editor\u2019s top right. Click  it to test your MediaFlow:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1736880431\/blog-Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation-8.png\" alt=\"A screenshot of the Cloudinary Console MediaFlow editor with the \u201cAuto-generate alt text\u201d workflow\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1942\" height=\"813\"\/><\/p>\n<p>The test will upload a sample image, generate the alt text, and update the image with the generated alt text. Once the test is complete, you\u2019ll see the result in a newly opened side panel on the right:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1736880432\/blog-Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation-9.png\" alt=\"A screenshot of the Cloudinary Console MediaFlow test results\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"589\" height=\"460\"\/><\/p>\n<h3>2. Set a Webhook<\/h3>\n<p>After you\u2019ve tested the MediaFlow, you\u2019ll need to set up a webhook that will trigger the MediaFlow whenever a new image is uploaded to your Cloudinary account. To do that, click the <strong>Cloudinary Upload<\/strong> node in the MediaFlow editor, which should open the node\u2019s settings on the right side of the editor. There, you can click the <strong>Set webhook<\/strong> button at the bottom:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1736880432\/blog-Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation-10.png\" alt=\"A screenshot of the Cloudinary Console MediaFlow editor with the \u201cCloudinary Upload\u201d node settings open\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"588\" height=\"1198\"\/><\/p>\n<p>A confirmation popup will appear. Click the <strong>Set webhook<\/strong> button to confirm:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1736880433\/blog-Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation-11.png\" alt=\"A screenshot of the Cloudinary Console MediaFlow editor with the \u201cSet webhook\u201d confirmation popup\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"664\" height=\"358\"\/><\/p>\n<p>You should see a confirmation message at the bottom of the node details:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1736880434\/blog-Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation-12.png\" alt=\"A screenshot of the Cloudinary Console MediaFlow editor with the \u201cWebhook set\u201d confirmation message\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"568\" height=\"112\"\/><\/p>\n<p>Once you\u2019ve set the webhook, you can close the node settings and save your MediaFlow just to be sure, and you\u2019re almost done!<\/p>\n<h3>3. Test the Setup<\/h3>\n<p>To test the setup, you can upload a new image to your Cloudinary account. Go to your <strong>Media Library<\/strong> and drag and drop an image file into the browser window. After the upload is complete, click the image to open the details panel on the right. There, after switching to the <strong>Metadata<\/strong> tab, you should see the alt text generated by the MediaFlow:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1736880435\/blog-Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation-13.png\" alt=\"A screenshot of the Cloudinary Console Media Library with the alt text generated by the MediaFlow\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"511\" height=\"688\"\/><\/p>\n<blockquote>\n<p>Note: The alt text might not be generated immediately after the upload, as the MediaFlow might take a second or two to process the image. If you don\u2019t see the alt text immediately, wait a few seconds and reopen the image details.<\/p>\n<\/blockquote>\n<p>And that\u2019s it! You\u2019ve successfully set up automated alt text generation for your images in Cloudinary. Now, every time you upload a new image, the alt text will be generated automatically and added to the image\u2019s metadata.<\/p>\n<h2>Displaying the Alt Text<\/h2>\n<p>Now that you\u2019ve the alt text generated for your images, you\u2019ll need to use it on your website. That means you must retrieve it from the image metadata using the Cloudinary <a href=\"https:\/\/cloudinary.com\/documentation\/admin_api\">Admin API<\/a>.<\/p>\n<p>Here\u2019s an example of how you can implement fetching and displaying the alt text in a Next.js app. First, you\u2019ll need to install the <code>cloudinary<\/code> package:<\/p>\n<pre class=\"js-syntax-highlighted\"><span><code class=\"hljs shcb-wrap-lines\">npm install cloudinary\n<\/code><\/span><\/pre>\n<p>Then, we\u2019ll create a server component that will fetch the alt text for a given image using the Cloudinary Admin API.<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-comment\">\/\/ components\/CloudinaryAltImage.tsx<\/span>\n\n<span class=\"hljs-keyword\">import<\/span> { v2 <span class=\"hljs-keyword\">as<\/span> cloudinary } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"cloudinary\"<\/span>;\n<span class=\"hljs-keyword\">import<\/span> { ImageProps } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"next\/image\"<\/span>;\n<span class=\"hljs-keyword\">import<\/span> CloudinaryAltImageInternal <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/CloudinaryAltImageInternal\"<\/span>;\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> <span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">CloudinaryAltImage<\/span>(<span class=\"hljs-params\">\n  props: Omit&lt;ImageProps, <span class=\"hljs-string\">\"src\"<\/span> | <span class=\"hljs-string\">\"quality\"<\/span> | <span class=\"hljs-string\">\"alt\"<\/span>&gt; &amp; {\n    src: string;\n    alt?: string; <span class=\"hljs-regexp\">\/\/<\/span> Optional alt text - if provided, it will be used instead of fetching it from Cloudinary\n  }\n<\/span>) <\/span>{\n  <span class=\"hljs-comment\">\/\/Configure the Cloudinary SDK with your credentials<\/span>\n  cloudinary.config({\n <span class=\"hljs-attr\">cloud_name<\/span>: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME,\n <span class=\"hljs-attr\">api_key<\/span>: process.env.NEXT_PUBLIC_CLOUDINARY_API_KEY,\n <span class=\"hljs-attr\">api_secret<\/span>: process.env.NEXT_PUBLIC_CLOUDINARY_API_SECRET,\n  });\n\n  <span class=\"hljs-keyword\">let<\/span> alt = props.alt;\n\n  <span class=\"hljs-keyword\">if<\/span> (!props.alt) {\n    <span class=\"hljs-comment\">\/\/ If alt text is not provided, fetch it from Cloudinary<\/span>\n    <span class=\"hljs-keyword\">const<\/span> { context } = <span class=\"hljs-keyword\">await<\/span> cloudinary.api.resource(props.src);\n    alt = context?.custom?.alt;\n  }\n\n  <span class=\"hljs-keyword\">return<\/span> (\n    <span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">CloudinaryAltImageInternal<\/span>\n      <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">{props.src}<\/span>\n      <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">{props.width}<\/span>\n      <span class=\"hljs-attr\">height<\/span>=<span class=\"hljs-string\">{props.height}<\/span>\n      <span class=\"hljs-attr\">alt<\/span>=<span class=\"hljs-string\">{alt<\/span> || \"\"}\n \/&gt;<\/span><\/span>\n );\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>Then, we\u2019ll create the <code>CloudinaryAltImageInternal<\/code> component to render the image with the alt text. We\u2019ll need a separate component for this because the <code>CldImage<\/code> component from <code>next-cloudinary<\/code> is a client-side component and we\u2019ll need to fetch the alt text on the server-side.<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-comment\">\/\/ components\/CloudinaryAltImageInternal.tsx<\/span>\n\n<span class=\"hljs-string\">\"use client\"<\/span>;\n\n<span class=\"hljs-keyword\">import<\/span> { CldImage } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"next-cloudinary\"<\/span>;\n<span class=\"hljs-keyword\">import<\/span> { ImageProps } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"next\/image\"<\/span>;\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">CloudinaryAltImageInternal<\/span>(<span class=\"hljs-params\">\n  props: Omit&lt;ImageProps, <span class=\"hljs-string\">\"src\"<\/span> | <span class=\"hljs-string\">\"quality\"<\/span>&gt; &amp; {\n    src: string;\n  }\n<\/span>) <\/span>{\n  <span class=\"hljs-keyword\">return<\/span> (\n    <span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">CldImage<\/span>\n      <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">{props.src}<\/span>\n      <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">{props.width}<\/span>\n      <span class=\"hljs-attr\">height<\/span>=<span class=\"hljs-string\">{props.height}<\/span>\n      <span class=\"hljs-attr\">alt<\/span>=<span class=\"hljs-string\">{props.alt}<\/span>\n    \/&gt;<\/span><\/span>\n  );\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>And finally, we can use the <code>CloudinaryAltImage<\/code> component in our Next.js pages:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-keyword\">import<\/span> CloudinaryAltImage <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/CloudinaryAltImage\"<\/span>;\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">Page<\/span>(<span class=\"hljs-params\"><\/span>) <\/span>{\n  <span class=\"hljs-keyword\">return<\/span> (\n    <span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">CloudinaryAltImage<\/span>\n        <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"600\"<\/span>\n        <span class=\"hljs-attr\">height<\/span>=<span class=\"hljs-string\">\"600\"<\/span>\n        <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"&lt;public_id_of_my_image&gt;\"<\/span>\n \/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n );\n}\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>Now, when you run your Next.js app and navigate to the page where the <code>CloudinaryAltImage<\/code> component is used, the alt text will be fetched from Cloudinary and displayed with the image.<\/p>\n<h3>Gotchas<\/h3>\n<p>Unfortunately, the admin API is only available for server-side use, so if you\u2019re rendering your website on the client-side, you\u2019ll either have to use a serverless function to retrieve the alt text or leverage the <a href=\"https:\/\/cloudinary.com\/documentation\/list_assets#client_side_asset_lists\">Client-side asset lists<\/a>, which will require you to tag your images.<\/p>\n<p>Another thing to remember is that there are rules to follow when adding alt text to images. For example, if the image is purely decorative and doesn\u2019t convey any information, you should use an empty alt attribute (<code>alt=&quot;&quot;<\/code>). Please refer to the <a href=\"https:\/\/www.w3.org\/WAI\/tutorials\/images\/decision-tree\/\">alt decision tree<\/a> for more information, and know that you may need to manually adjust the generated alt text in some cases.<\/p>\n<h2>Conclusion<\/h2>\n<p>You\u2019ve set up automated alt text generation for your images in Cloudinary. This will make your website more accessible to people with vision impairments and help you comply with accessibility standards.<\/p>\n<p>Remember, however, that automated alt text generation isn\u2019t a silver bullet, and you should consider the complexities of implementing accessibility on your website.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":87,"featured_media":36570,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[337,336,363],"class_list":["post-36567","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-accessibility","tag-ai","tag-media-flows"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Enhancing Your Website\u2019s Accessibility with Cloudinary\u2019s Alt Text Generation<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Enhancing Your Website\u2019s Accessibility with Cloudinary\u2019s Alt Text Generation\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-13T15:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-16T17:34:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1736808335\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation-jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"melindapham\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation\"},\"author\":{\"name\":\"melindapham\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9\"},\"headline\":\"Enhancing Your Website\u2019s Accessibility with Cloudinary\u2019s Alt Text Generation\",\"datePublished\":\"2025-01-13T15:00:00+00:00\",\"dateModified\":\"2025-04-16T17:34:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation\"},\"wordCount\":11,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1736808335\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation.jpg?_i=AA\",\"keywords\":[\"Accessibility\",\"AI\",\"MediaFlows\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation\",\"url\":\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation\",\"name\":\"Enhancing Your Website\u2019s Accessibility with Cloudinary\u2019s Alt Text Generation\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1736808335\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation.jpg?_i=AA\",\"datePublished\":\"2025-01-13T15:00:00+00:00\",\"dateModified\":\"2025-04-16T17:34:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1736808335\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1736808335\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation.jpg?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Enhancing Your Website\u2019s Accessibility with Cloudinary\u2019s Alt Text Generation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9\",\"name\":\"melindapham\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g\",\"caption\":\"melindapham\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Enhancing Your Website\u2019s Accessibility with Cloudinary\u2019s Alt Text Generation","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation","og_locale":"en_US","og_type":"article","og_title":"Enhancing Your Website\u2019s Accessibility with Cloudinary\u2019s Alt Text Generation","og_url":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation","og_site_name":"Cloudinary Blog","article_published_time":"2025-01-13T15:00:00+00:00","article_modified_time":"2025-04-16T17:34:03+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1736808335\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation-jpg?_i=AA","type":"image\/jpeg"}],"author":"melindapham","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation"},"author":{"name":"melindapham","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9"},"headline":"Enhancing Your Website\u2019s Accessibility with Cloudinary\u2019s Alt Text Generation","datePublished":"2025-01-13T15:00:00+00:00","dateModified":"2025-04-16T17:34:03+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation"},"wordCount":11,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1736808335\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation.jpg?_i=AA","keywords":["Accessibility","AI","MediaFlows"],"inLanguage":"en-US","copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation","url":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation","name":"Enhancing Your Website\u2019s Accessibility with Cloudinary\u2019s Alt Text Generation","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1736808335\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation.jpg?_i=AA","datePublished":"2025-01-13T15:00:00+00:00","dateModified":"2025-04-16T17:34:03+00:00","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1736808335\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1736808335\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation.jpg?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/website-accessibility-alt-text-generation#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Enhancing Your Website\u2019s Accessibility with Cloudinary\u2019s Alt Text Generation"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9","name":"melindapham","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g","caption":"melindapham"}}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1736808335\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation\/Enhancing_Your_Website_s_Accessibility_with_Cloudinary_s_Alt_Text_Generation.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/36567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/87"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=36567"}],"version-history":[{"count":4,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/36567\/revisions"}],"predecessor-version":[{"id":37423,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/36567\/revisions\/37423"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/36570"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=36567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=36567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=36567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}