{"id":38295,"date":"2025-08-28T07:00:00","date_gmt":"2025-08-28T14:00:00","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=38295"},"modified":"2025-08-21T15:16:46","modified_gmt":"2025-08-21T22:16:46","slug":"accessible-videos-next-seo-hack","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack","title":{"rendered":"Accessible Videos Are the Next SEO Hack. Here\u2019s How to Do It Right."},"content":{"rendered":"\n<p>Video content is exploding across search, social media, and AI-generated answers, but few optimize for discoverability or accessibility.<\/p>\n\n\n\n<p>When people think of SEO, the first things that come to mind might be text based: keywords, backlinks, page speed, etc., but Google search has changed. AI-powered answers, video-first social feeds, and platforms like LinkedIn are all prioritizing video.&nbsp;<\/p>\n\n\n\n<p>To stand out, your videos need to be structured and accessible with captions, transcripts, metadata, and tags that machines can actually read. These not only give Google more to crawl, but they also help you reach wider audiences, boost engagement, and signal that you&#8217;re creating inclusive content.<\/p>\n\n\n\n<p>This guide walks you through how to make video assets SEO-ready and accessible using Cloudinary.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to Automate Alt Text, Tagging, and Structured Data With Cloudinary<\/h2>\n\n\n\n<p>Uploading videos is straightforward, but making them searchable, discoverable, and accessible to search engines is where most fall short.<\/p>\n\n\n\n<p>Cloudinary can help automate many of these tasks, such as making it easy to add relevant tags to your video using the <a target=\"_blank\" href=\"https:\/\/cloudinary.com\/documentation\/google_ai_video_transcription_addon\" rel=\"noreferrer noopener\">Google Video AI add-on<\/a>. You can also add alt text and captions to your videos when uploading.&nbsp;<\/p>\n\n\n\n<p>For this post, we\u2019ll use the <a target=\"_blank\" href=\"https:\/\/cloudinary.com\/documentation\/cloudinary_sdks\" rel=\"noreferrer noopener\">Cloudinary SDK<\/a> to handle uploads. You can download it using the command below:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">code<\/span>&gt;<\/span>npm install cloudinary<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">code<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>You\u2019ll need a Cloudinary account to access your credentials, which allow you to interact with the Cloudinary SDK. If you don\u2019t have an account yet, sign up at <a target=\"_blank\" href=\"https:\/\/cloudinary.com\" rel=\"noreferrer noopener\">Cloudinary<\/a>.<\/p>\n\n\n\n<p>After signing in, go to your <a target=\"_blank\" href=\"https:\/\/cloudinary.com\/users\/login\" rel=\"noreferrer noopener\">Cloudinary dashboard<\/a> and copy the following details: <strong>Cloud Name<\/strong>, <strong>API Key<\/strong>, and <strong>API Secret<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296720\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-1.png\" alt=\"Product Environment Credientials with the Cloud name, API key, and API secret blanked out. Underneath it is Insights &amp; Recommendations, which says: AUtomatically focus on the most interesting part. Use g_auto AI to focus on the most important part of each image and video frame.\"\/><figcaption class=\"wp-element-caption\">Cloudinary API keys from its dashboard<\/figcaption><\/figure>\n\n\n\n<p>You can store these details in environment variables and configure Cloudinary at the top of your script like this:<\/p>\n\n\n<pre class=\"wp-block-code\" 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-keyword\">import<\/span> cloudinary <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'cloudinary'<\/span>;\n\ncloudinary.config({\n  <span class=\"hljs-attr\">cloud_name<\/span>: CLOUDINARY_CLOUD_NAME,\n  <span class=\"hljs-attr\">api_key<\/span>: CLOUDINARY_API_KEY,\n  <span class=\"hljs-attr\">api_secret<\/span>: CLOUDINARY_API_SECRET,\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\n\n<p>With all of this set up, let\u2019s now see how to upload a video and add both <a target=\"_blank\" href=\"https:\/\/cloudinary.com\/documentation\/contextual_metadata\" rel=\"noreferrer noopener\">contextual metadata<\/a> and categorization tags.<\/p>\n\n\n\n<p>To start, use the same cloudinary instance you configured earlier to upload a video and pass metadata using the context field. This allows you to <a target=\"_blank\" href=\"https:\/\/cloudinary.com\/blog\/making_media_accessible_how_to_automatically_generate_alt_text_for_images\" rel=\"noreferrer noopener\">add features <\/a>such as alt text and captions.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">cloudinary.uploader.upload(<span class=\"hljs-string\">'video.mp4'<\/span>, {\n  <span class=\"hljs-attr\">resource_type<\/span>: <span class=\"hljs-string\">'video'<\/span>,\n  <span class=\"hljs-attr\">context<\/span>: <span class=\"hljs-string\">'caption=This is a test video|alt=Test Video'<\/span>\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\n\n<p>The example above adds the caption and alt text, separated by the | character, all in one string. Cloudinary will split this up and store it like this:<\/p>\n\n\n<pre class=\"wp-block-code\" 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-string\">\"context\"<\/span>: {\n\n\u00a0 \u00a0 \u00a0 \u00a0 <span class=\"hljs-string\">\"custom\"<\/span>: {\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"hljs-string\">\"alt\"<\/span>: <span class=\"hljs-string\">\"Test Video\"<\/span>,\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"hljs-string\">\"caption\"<\/span>: <span class=\"hljs-string\">\"This is a test video\"<\/span>\n\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\n\u00a0 \u00a0 },<\/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\n\n<p>You can also auto-generate tags using the <a target=\"_blank\" href=\"https:\/\/cloudinary.com\/documentation\/google_automatic_video_tagging_addon\" rel=\"noreferrer noopener\">Google Video Tagging Add-on<\/a>. To use this add-on, search for the <strong>Google AI Video Transcription<\/strong> add-on on your Cloudinary dashboard:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296720\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-2.png\" alt=\"Available add-ons with a red box around Google Auto Tagging.\"\/><figcaption class=\"wp-element-caption\">Google Video Tagging add-on<\/figcaption><\/figure>\n\n\n\n<p>Click the add-on and subscribe to the free plan:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296720\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-3.png\" alt=\"In Google Automatic Video Tagging, the Free plan is highlighted.\"\/><figcaption class=\"wp-element-caption\">Subscribe to the free plan<\/figcaption><\/figure>\n\n\n\n<p>Now, when you attach categorization: &#8216;google_video_tagging&#8217; in your upload, Cloudinary will generate tags like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-string\">\"info\"<\/span>: {\n\n\u00a0 \u00a0 <span class=\"hljs-string\">\"categorization\"<\/span>: {\n\n\u00a0 \u00a0 \u00a0 <span class=\"hljs-string\">\"google_video_tagging\"<\/span>: {\n\n\u00a0 \u00a0 \u00a0 \u00a0 <span class=\"hljs-string\">\"data\"<\/span>: &#91;\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 { <span class=\"hljs-string\">\"tag\"<\/span>: <span class=\"hljs-string\">\"solar power\"<\/span>, <span class=\"hljs-string\">\"confidence\"<\/span>: <span class=\"hljs-number\">0.98<\/span> },\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 { <span class=\"hljs-string\">\"tag\"<\/span>: <span class=\"hljs-string\">\"cityscape\"<\/span>, <span class=\"hljs-string\">\"confidence\"<\/span>: <span class=\"hljs-number\">0.91<\/span> }\n\n\u00a0 \u00a0 \u00a0 \u00a0 ]\n\n\u00a0 \u00a0 \u00a0 }\n\n\u00a0 \u00a0 }\n\n\u00a0 },<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><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\n\n<p>These tags are useful for organizing your video library, enabling search filters, and improving semantic SEO.<\/p>\n\n\n\n<p>Once your video is uploaded, Cloudinary stores everything. You (or your dev) can then grab this data by calling <a target=\"_blank\" href=\"https:\/\/cloudinary.com\/documentation\/admin_api\" rel=\"noreferrer noopener\">Cloudinary\u2019s Admin API<\/a>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\">GET https:\/\/api.cloudinary.com\/v1_1\/<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cloud_name<\/span>&gt;<\/span>\/resources\/video\/upload\/<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">public_id<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>And you\u2019ll get a detailed response that looks like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json shcb-wrap-lines\">{\n\n\u00a0 <span class=\"hljs-attr\">\"secure_url\"<\/span>: <span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/...\/video.mp4\"<\/span>,\n\n\u00a0 <span class=\"hljs-attr\">\"context\"<\/span>: {\n\n\u00a0 \u00a0 <span class=\"hljs-attr\">\"custom\"<\/span>: {\n\n\u00a0 \u00a0 \u00a0 <span class=\"hljs-attr\">\"alt\"<\/span>: <span class=\"hljs-string\">\"Test Video\"<\/span>,\n\n\u00a0 \u00a0 \u00a0 <span class=\"hljs-attr\">\"caption\"<\/span>: <span class=\"hljs-string\">\"This is a test video\"<\/span>\n\n\u00a0 \u00a0 }\n\n\u00a0 },\n\n\u00a0 <span class=\"hljs-attr\">\"info\"<\/span>: {\n\n\u00a0 \u00a0 <span class=\"hljs-attr\">\"categorization\"<\/span>: {\n\n\u00a0 \u00a0 \u00a0 <span class=\"hljs-attr\">\"google_video_tagging\"<\/span>: {\n\n\u00a0 \u00a0 \u00a0 \u00a0 <span class=\"hljs-attr\">\"data\"<\/span>: &#91;\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 { <span class=\"hljs-attr\">\"tag\"<\/span>: <span class=\"hljs-string\">\"solar power\"<\/span>, <span class=\"hljs-attr\">\"confidence\"<\/span>: <span class=\"hljs-number\">0.98<\/span> },\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 { <span class=\"hljs-attr\">\"tag\"<\/span>: <span class=\"hljs-string\">\"cityscape\"<\/span>, <span class=\"hljs-attr\">\"confidence\"<\/span>: <span class=\"hljs-number\">0.91<\/span> }\n\n\u00a0 \u00a0 \u00a0 \u00a0 ]\n\n\u00a0 \u00a0 \u00a0 }\n\n\u00a0 \u00a0 }\n\n\u00a0 },\n\n\u00a0 <span class=\"hljs-attr\">\"duration\"<\/span>: <span class=\"hljs-number\">196<\/span>,\n\n\u00a0 <span class=\"hljs-attr\">\"width\"<\/span>: <span class=\"hljs-number\">1280<\/span>,\n\n\u00a0 <span class=\"hljs-attr\">\"height\"<\/span>: <span class=\"hljs-number\">720<\/span>\n\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Now you\u2019ve got everything you need to describe the video in a way search engines understand. The next step is to wrap it in <a target=\"_blank\" href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/intro-structured-data\" rel=\"noreferrer noopener\">structured data<\/a> (<a target=\"_blank\" href=\"https:\/\/json-ld.org\/\" rel=\"noreferrer noopener\">JSON-LD<\/a>).<\/p>\n\n\n\n<p>Structured data is a special format that gives search engines extra context about what\u2019s on your page. For video content specifically, there\u2019s a dedicated format called VideoObject.<\/p>\n\n\n\n<p>This schema markup is written in JSON-LD (JavaScript Object Notation for Linked Data). It sits inside a <code>&lt;script type=\"application\/ld+json\"&gt;<\/code> block in your HTML and provides structured data that search engines can read without rendering the page.<\/p>\n\n\n\n<p>You wrap it all up in a <code>&lt;script&gt;<\/code> tag like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"application\/ld+json\"<\/span>&gt;<\/span><span class=\"actionscript\">\n\n{\n\n\u00a0 <span class=\"hljs-string\">\"@context\"<\/span>: <span class=\"hljs-string\">\"https:\/\/schema.org\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"@type\"<\/span>: <span class=\"hljs-string\">\"VideoObject\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"name\"<\/span>: <span class=\"hljs-string\">\"This is a test video\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"description\"<\/span>: <span class=\"hljs-string\">\"Test Video\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"thumbnailUrl\"<\/span>: <span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/your_cloud\/video\/upload\/thumbnail.jpg\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"uploadDate\"<\/span>: <span class=\"hljs-string\">\"2025-06-12\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"contentUrl\"<\/span>: <span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/your_cloud\/video\/upload\/video.mp4\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"duration\"<\/span>: <span class=\"hljs-string\">\"PT3M16S\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"keywords\"<\/span>: &#91;<span class=\"hljs-string\">\"solar power\"<\/span>, <span class=\"hljs-string\">\"cityscape\"<\/span>]\n\n}\n\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Let\u2019s break it down:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>@type: VideoObject<\/code> tells Google, \u201cHey, this is a video.\u201d<\/li>\n\n\n\n<li><code>name<\/code> and <code>description<\/code> are pulled from your caption and alt text.<\/li>\n\n\n\n<li><code>contentUrl<\/code> is the direct link to the video file.<\/li>\n\n\n\n<li><code>keywords<\/code> are those auto-generated tags from Google\u2019s video AI.<\/li>\n\n\n\n<li><code>duration<\/code> is how long the video is (formatted as ISO duration: PT3M16S = 3 min, 16 sec).<\/li>\n<\/ul>\n\n\n\n<p>You can <a target=\"_blank\" href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/video\" rel=\"noreferrer noopener\">inject this block<\/a> into the page using your CMS, a frontend framework <a target=\"_blank\" href=\"https:\/\/nextjs.org\/docs\/app\/guides\/json-ld\" rel=\"noreferrer noopener\">like Next.js<\/a>, or just by pasting it into the HTML manually.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Embedding Transcripts and Captions<\/h2>\n\n\n\n<p>In addition to adding metadata to your video, captions and transcripts are also very important. They make your video accessible for people watching on mute, users with hearing impairments, and search engines or AI tools trying to parse your content.<\/p>\n\n\n\n<p>You may wonder what the difference is between captions and transcripts:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Captions<\/strong> are time-synced text shown during playback.<\/li>\n\n\n\n<li><strong>Transcripts<\/strong> are the full, unsynced audio in text form.<\/li>\n<\/ul>\n\n\n\n<p>Transcripts are especially great for SEO, skimming, and summarization.<\/p>\n\n\n\n<p>If you don\u2019t already have a caption file, Cloudinary can generate one using the <a target=\"_blank\" href=\"https:\/\/cloudinary.com\/documentation\/google_ai_video_transcription_addon\" rel=\"noreferrer noopener\">Google AI Video Transcription add-on<\/a>. Search for it on the Add-ons page and subscribe to the free plan:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296720\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-4.png\" alt=\"The Google AI Video Transcription's Add-on Plan options. The Free plan is highlighted.\"\/><figcaption class=\"wp-element-caption\">Subscribe to the free plan of Google AI Video Transcription<\/figcaption><\/figure>\n\n\n\n<p>You can now modify your upload logic to request a subtitle file from Google\u2019s Speech-to-Text API using the <code>raw_convert<\/code> parameter:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"application\/ld+json\"<\/span>&gt;<\/span><span class=\"actionscript\">\n\n{\n\n\u00a0 <span class=\"hljs-string\">\"@context\"<\/span>: <span class=\"hljs-string\">\"https:\/\/schema.org\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"@type\"<\/span>: <span class=\"hljs-string\">\"VideoObject\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"name\"<\/span>: <span class=\"hljs-string\">\"This is a test video\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"description\"<\/span>: <span class=\"hljs-string\">\"Test Video\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"thumbnailUrl\"<\/span>: <span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/your_cloud\/video\/upload\/thumbnail.jpg\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"uploadDate\"<\/span>: <span class=\"hljs-string\">\"2025-06-12\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"contentUrl\"<\/span>: <span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/your_cloud\/video\/upload\/video.mp4\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"duration\"<\/span>: <span class=\"hljs-string\">\"PT3M16S\"<\/span>,\n\n\u00a0 <span class=\"hljs-string\">\"keywords\"<\/span>: &#91;<span class=\"hljs-string\">\"solar power\"<\/span>, <span class=\"hljs-string\">\"cityscape\"<\/span>]\n\n}\n\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This tells Cloudinary to send the audio to Google Speech-to-Text and return a .vtt subtitle file you can use with any video player.&nbsp;<\/p>\n\n\n\n<p>Once the <code>.vtt<\/code> file is ready, include it in your <code>&lt;video&gt;<\/code> element like so:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">video<\/span> <span class=\"hljs-attr\">controls<\/span> <span class=\"hljs-attr\">crossOrigin<\/span>=<span class=\"hljs-string\">\"anonymous\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"w-full max-w-md border-4 rounded\"<\/span>&gt;<\/span>\n\n\u00a0 <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">source<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/your_cloud\/video\/upload\/solar_video_demo.mp4\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"video\/mp4\"<\/span> \/&gt;<\/span>\n\n\u00a0 <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">track<\/span>\n\n\u00a0 \u00a0 <span class=\"hljs-attr\">label<\/span>=<span class=\"hljs-string\">\"English\"<\/span>\n\n\u00a0 \u00a0 <span class=\"hljs-attr\">kind<\/span>=<span class=\"hljs-string\">\"subtitles\"<\/span>\n\n\u00a0 \u00a0 <span class=\"hljs-attr\">srcLang<\/span>=<span class=\"hljs-string\">\"en\"<\/span>\n\n\u00a0 \u00a0 <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/your_cloud\/raw\/upload\/solar_video_demo.vtt\"<\/span>\n\n\u00a0 \u00a0 <span class=\"hljs-attr\">default<\/span>\n\n\u00a0 \/&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">video<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This gives you a video that plays normally, with toggleable subtitles for accessibility and UX, and better SEO, because now your video has a discoverable text layer.<\/p>\n\n\n\n<p>To boost your SEO even more, don\u2019t stop at captions. Drop the transcript right below your video as readable HTML:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">video<\/span> <span class=\"hljs-attr\">controls<\/span> <span class=\"hljs-attr\">crossOrigin<\/span>=<span class=\"hljs-string\">\"anonymous\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"w-full max-w-md border-4 rounded\"<\/span>&gt;<\/span>\n\n\u00a0 <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">source<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/your_cloud\/video\/upload\/solar_video_demo.mp4\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"video\/mp4\"<\/span> \/&gt;<\/span>\n\n\u00a0 <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">track<\/span>\n\n\u00a0 \u00a0 <span class=\"hljs-attr\">label<\/span>=<span class=\"hljs-string\">\"English\"<\/span>\n\n\u00a0 \u00a0 <span class=\"hljs-attr\">kind<\/span>=<span class=\"hljs-string\">\"subtitles\"<\/span>\n\n\u00a0 \u00a0 <span class=\"hljs-attr\">srcLang<\/span>=<span class=\"hljs-string\">\"en\"<\/span>\n\n\u00a0 \u00a0 <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/your_cloud\/raw\/upload\/solar_video_demo.vtt\"<\/span>\n\n\u00a0 \u00a0 <span class=\"hljs-attr\">default<\/span>\n\n\u00a0 \/&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">video<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This helps Google index content like blog text and lets users skim instead of watching the full video. If you used the google_speech add-on, you already have the text. Convert the .vtt file to plain text or display it in its original format.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Testing if Your Video SEO and Accessibility Setup Works<\/h2>\n\n\n\n<p>Once all of this is in place, you want to make sure your setup actually meets SEO and accessibility standards.<\/p>\n\n\n\n<p>Start with <a href=\"https:\/\/search.google.com\/test\/rich-results\" target=\"_blank\" rel=\"noreferrer noopener\">Google\u2019s Rich Results Test<\/a> tool. It checks whether your structured data (like <code>VideoObject<\/code>) is valid and eligible for enhanced search features.<\/p>\n\n\n\n<p>To use it:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Go to Google&#8217;s Rich Results Test.<\/li>\n\n\n\n<li>Paste the URL of your video page.<\/li>\n\n\n\n<li>Click the <strong>Test URL<\/strong> button.<\/li>\n<\/ol>\n\n\n\n<p>If the video markup is valid, you&#8217;ll see a <strong>Videos<\/strong> section among the results. If anything is missing, like no contentUrl, missing duration, or invalid @context, the tool will point it out.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296720\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-5.png\" alt=\"The Videos section: 4 valid items detected. The details section underneath has crawl history and detected items history.\"\/><figcaption class=\"wp-element-caption\">Rich Results Test result example<\/figcaption><\/figure>\n\n\n\n<p>You can also use <a target=\"_blank\" href=\"https:\/\/developer.chrome.com\/docs\/lighthouse\" rel=\"noreferrer noopener\">Lighthouse<\/a> in Chrome DevTools to test for accessibility issues that affect real users (and sometimes SEO too).&nbsp;<\/p>\n\n\n\n<p>To use it:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Open your video page in Chrome.<\/li>\n\n\n\n<li>Right-click and choose <strong>Inspect<\/strong><strong>.<\/strong><\/li>\n\n\n\n<li>Click the <strong>Lighthouse<\/strong> tab.<\/li>\n\n\n\n<li>Click the <strong>Analyze page load<\/strong> button.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296721\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-6.png\" alt=\"Lighthouse in Chrome DevTools to test for accessibility. The modes are: Navigation (Default), Timespan, and Snapshot. Device options are Mobile and Desktop. Categories options are Performance, Accessibility, Best practices, and SEO. There's a warning note: There may be stored data affecting loading performance in this location: IndexedDB. Audit this page in an incognito window to prevent those resources from affecting your scores.\"\/><figcaption class=\"wp-element-caption\">Running Lighthouse in Chrome<\/figcaption><\/figure>\n\n\n\n<p>Lighthouse will scan everything. Your goal is to get the Accessibility score as close to 100 as possible. Here\u2019s an example of what the results might look like:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296722\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-7.png\" alt=\"Lighthouse report showing a strong Accessibility score of 100 and a detailed issue breakdown.\"\/><figcaption class=\"wp-element-caption\">Lighthouse report showing a strong Accessibility score and detailed issue breakdown<\/figcaption><\/figure>\n\n\n\n<p>You\u2019ll see a breakdown of passed checks and any accessibility issues detected, like missing labels, insufficient contrast, or unsupported video elements. Fixing these not only improves SEO but also creates a better experience for everyone.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to Build a Media Library That Supports SEO Performance Goals<\/h2>\n\n\n\n<p>So far, we\u2019ve covered the basics like adding captions, transcripts, structured data, and metadata. But what happens when you\u2019re managing hundreds of videos?<\/p>\n\n\n\n<p>You need a repeatable system. That means properly tagging every video uploaded to Cloudinary, storing metadata at upload, and automating as much of this as possible.<\/p>\n\n\n\n<p>One way to do this is to use <a target=\"_blank\" href=\"https:\/\/cloudinary.com\/products\/mediaflows\" rel=\"noreferrer noopener\">Cloudinary MediaFlows<\/a>. This ensures that every uploaded video is automatically processed and enriched without manual intervention.<\/p>\n\n\n\n<p>Cloudinary\u2019s MediaFlows lets you automate your assets (images and videos) by creating workflows that handle these tasks behind the scenes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/cloudinary.com\/documentation\/mediaflows_easyflows\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>EasyFlows<\/strong><\/a>. A simple, no-code automation tool for predefined actions.<\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/documentation\/mediaflows_build_flow\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>PowerFlows<\/strong><\/a>. A more advanced, flexible builder that allows for custom logic.<\/li>\n<\/ul>\n\n\n\n<p>To access MediaFlows, go to your Cloudinary console and click the <strong>MediaFlows<\/strong> logo as shown below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296723\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-8.png\" alt=\"In Cloudinary, a red arrow points to the MediaFlows icon on the left-hand navigation panel.\"\/><figcaption class=\"wp-element-caption\">Accessing MediaFlows in Cloudinary<\/figcaption><\/figure>\n\n\n\n<p>The MediaFlows dashboard will open, where you can create workflows. Since you need something that dynamically triggers video processing on upload, choose <strong>PowerFlows<\/strong>.<\/p>\n\n\n\n<p>Click the <strong>+ Create New<\/strong> button, select <strong>PowerFlow<\/strong>, and the UI will open, where you can drag and configure blocks for your workflow.<\/p>\n\n\n\n<p>On the left-hand side, you\u2019ll see a list of blocks for actions, add-ons, APIs, and more. Search through this list to configure your flow visually.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296723\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-9.png\" alt=\"MediaFlows blocks:\nTriggers: Cloudinary Upload, On Structured Metadata Change, On Tag Change, Cloudinary Folder Changed, Catch Webhook, Periodic Search Media, Scheduler, DAM App, Cloudinary Notification. Flow Logic: Complex Condition, Wait For All, Condition, and more outside of the screenshot.\"\/><figcaption class=\"wp-element-caption\">MediaFlows blocks.<\/figcaption><\/figure>\n\n\n\n<p>For this guide, you\u2019ll use three blocks:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cloudinary Upload<\/li>\n\n\n\n<li>Update Contextual Metadata<\/li>\n\n\n\n<li>Google Video Tagging Add-on<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Detect Video Uploads<\/h3>\n\n\n\n<p>Drag the <strong>Cloudinary Upload<\/strong> block to the workspace. This block will listen for new uploads.<\/p>\n\n\n\n<p>To make the workflow react to uploads, you need to set up a webhook. Click the <strong>Set Webhook<\/strong> button and enable it. Once done, any time a video is uploaded, the webhook will trigger this workflow.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296723\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-10.png\" alt=\"Configurable webhook for Cloudinary Upload block. A red arrow points to Set Webhook button.\"\/><figcaption class=\"wp-element-caption\">Configuring webhook for Cloudinary Upload block<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Add Metadata to the Uploaded Video<\/h3>\n\n\n\n<p>Next, drag the <strong>Update Contextual Metadata<\/strong> block into the workspace and connect it to the Cloudinary Upload block.<\/p>\n\n\n\n<p>Click the <strong>Update Contextual Metadata<\/strong> block and set custom metadata fields like caption or alt. These fields will be added to the video as soon as it&#8217;s uploaded.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296723\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-11.png\" alt=\"The Contextual Metadata block.\"\/><figcaption class=\"wp-element-caption\">Update Contextual Metadata block<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Auto-Generate Tags Using Google AI<\/h3>\n\n\n\n<p>Now, scroll to the Add-ons section on the left. Drag the <strong>Google Video Tagging<\/strong> block to the canvas and connect it to the <strong>Update Contextual Metadata<\/strong> block.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296723\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-12.png\" alt=\"Google Video Tagging block in MediaFlows.\"\/><figcaption class=\"wp-element-caption\">Google Video Tagging block in MediaFlows<\/figcaption><\/figure>\n\n\n\n<p>Once connected, the workflow will auto-tag every video using Google AI tagging as part of the upload process.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Test Your Setup<\/h3>\n\n\n\n<p>After setting up your blocks, click <strong>Save<\/strong> to store the workflow.<\/p>\n\n\n\n<p>Now let\u2019s test it. Click the <strong>Settings<\/strong> icon beside the <strong>Test<\/strong> button to configure which sample asset to upload. Use a video <a target=\"_blank\" href=\"https:\/\/res.cloudinary.com\/tobest-foundation\/video\/upload\/v1750008025\/a1k13ouxc3uvspkbpx5g_hnt4gh.mp4\" rel=\"noreferrer noopener\">URL<\/a> as your test asset.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296725\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-13.png\" alt=\"In Flow settings, you can configure your test video in MediaFlows. The video still shows Earth from space.\"\/><figcaption class=\"wp-element-caption\">Configure test video in MediaFlows<\/figcaption><\/figure>\n\n\n\n<p>Once the test video is set, click <strong>Test<\/strong>. This will trigger the full workflow using that video.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296725\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-14.png\" alt=\"Success message after testing MediaFlow for Cloudinary Upload, Update Contextual Metadata, and Google Video Tagging.\"\/><figcaption class=\"wp-element-caption\">Success message after testing MediaFlow<\/figcaption><\/figure>\n\n\n\n<p>If everything\u2019s working, you\u2019ll see success messages like the one above. If you head to your Cloudinary Media Library, you\u2019ll find the video uploaded, tagged automatically, and captioned with the metadata you specified.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1755296725\/blog-Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right.-15.png\" alt=\"Video successfully uploaded with the caption: This is a test video.\"\/><figcaption class=\"wp-element-caption\">Video successfully uploaded with caption<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Wrapping Up<\/h2>\n\n\n\n<p>Making your videos SEO-friendly and accessible isn\u2019t just good practice, it\u2019s essential if you want them to be seen, understood, and ranked. With Cloudinary, you can automate transcripts, captions, metadata, and tagging and then scale that across hundreds of assets using MediaFlows.<\/p>\n\n\n\n<p><a href=\"https:\/\/cloudinary.com\/users\/register\/free\" target=\"_blank\" rel=\"noreferrer noopener\">Sign up on Cloudinary<\/a> to start structuring your video assets for accessibility and discoverability at scale.<\/p>\n\n\n\n<p><strong>Resources:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/cloudinary.com\/documentation\/video_manipulation_and_delivery\" target=\"_blank\" rel=\"noreferrer noopener\">Cloudinary Video Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/documentation\/digital_asset_management_overview\" target=\"_blank\" rel=\"noreferrer noopener\">Digital Asset Management Overview<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/documentation\/mediaflows\" target=\"_blank\" rel=\"noreferrer noopener\">Cloudinary MediaFlows<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Video content is exploding across search, social media, and AI-generated answers, but few optimize for discoverability or accessibility. When people think of SEO, the first things that come to mind might be text based: keywords, backlinks, page speed, etc., but Google search has changed. AI-powered answers, video-first social feeds, and platforms like LinkedIn are all [&hellip;]<\/p>\n","protected":false},"author":87,"featured_media":38381,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[337,303],"class_list":["post-38295","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-accessibility","tag-video"],"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>Accessible Videos Are the Next SEO Hack. Here\u2019s How to Do It Right.<\/title>\n<meta name=\"description\" content=\"Optimize your videos for SEO and accessibility using Cloudinary. Learn how to automate captions, transcripts, metadata, and structured data at scale.\" \/>\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\/accessible-videos-next-seo-hack\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Accessible Videos Are the Next SEO Hack. Here\u2019s How to Do It Right.\" \/>\n<meta property=\"og:description\" content=\"Optimize your videos for SEO and accessibility using Cloudinary. Learn how to automate captions, transcripts, metadata, and structured data at scale.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-28T14:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1755643235\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog.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\/accessible-videos-next-seo-hack#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack\"},\"author\":{\"name\":\"melindapham\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9\"},\"headline\":\"Accessible Videos Are the Next SEO Hack. Here\u2019s How to Do It Right.\",\"datePublished\":\"2025-08-28T14:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack\"},\"wordCount\":1779,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1755643235\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog.jpg?_i=AA\",\"keywords\":[\"Accessibility\",\"Video\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack\",\"url\":\"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack\",\"name\":\"Accessible Videos Are the Next SEO Hack. Here\u2019s How to Do It Right.\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1755643235\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog.jpg?_i=AA\",\"datePublished\":\"2025-08-28T14:00:00+00:00\",\"description\":\"Optimize your videos for SEO and accessibility using Cloudinary. Learn how to automate captions, transcripts, metadata, and structured data at scale.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1755643235\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1755643235\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog.jpg?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Accessible Videos Are the Next SEO Hack. Here\u2019s How to Do It Right.\"}]},{\"@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":"Accessible Videos Are the Next SEO Hack. Here\u2019s How to Do It Right.","description":"Optimize your videos for SEO and accessibility using Cloudinary. Learn how to automate captions, transcripts, metadata, and structured data at scale.","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\/accessible-videos-next-seo-hack","og_locale":"en_US","og_type":"article","og_title":"Accessible Videos Are the Next SEO Hack. Here\u2019s How to Do It Right.","og_description":"Optimize your videos for SEO and accessibility using Cloudinary. Learn how to automate captions, transcripts, metadata, and structured data at scale.","og_url":"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack","og_site_name":"Cloudinary Blog","article_published_time":"2025-08-28T14:00:00+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1755643235\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog.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\/accessible-videos-next-seo-hack#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack"},"author":{"name":"melindapham","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9"},"headline":"Accessible Videos Are the Next SEO Hack. Here\u2019s How to Do It Right.","datePublished":"2025-08-28T14:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack"},"wordCount":1779,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1755643235\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog.jpg?_i=AA","keywords":["Accessibility","Video"],"inLanguage":"en-US","copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack","url":"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack","name":"Accessible Videos Are the Next SEO Hack. Here\u2019s How to Do It Right.","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1755643235\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog.jpg?_i=AA","datePublished":"2025-08-28T14:00:00+00:00","description":"Optimize your videos for SEO and accessibility using Cloudinary. Learn how to automate captions, transcripts, metadata, and structured data at scale.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1755643235\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1755643235\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog.jpg?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/accessible-videos-next-seo-hack#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Accessible Videos Are the Next SEO Hack. Here\u2019s How to Do It Right."}]},{"@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\/v1755643235\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog\/Accessible_Videos_Are_the_Next_SEO_Hack._Here_s_How_to_Do_It_Right-blog.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/38295","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=38295"}],"version-history":[{"count":4,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/38295\/revisions"}],"predecessor-version":[{"id":38404,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/38295\/revisions\/38404"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/38381"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=38295"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=38295"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=38295"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}