{"id":21273,"date":"2015-03-11T15:39:40","date_gmt":"2015-03-11T15:39:40","guid":{"rendered":"http:\/\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images"},"modified":"2025-06-06T11:38:23","modified_gmt":"2025-06-06T18:38:23","slug":"how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images","title":{"rendered":"How to dynamically create SEO friendly URLs for your site&#039;s images"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>Image URLs tend to appear as a long list of random characters that are not intended for viewers and are not very useful to search engines. Concise and meaningful image file names are better for search engines to extract information about an image, therefore supporting your site\u2019s SEO ranking.<\/p>\n<p>Often times, users\u2019 uploaded image files do not have descriptive names. This creates a great challenge for developers and site content managers who need to maintain SEO friendly URLs, short, and meaningful URLs. Cloudinary helped tackle this issue by offering users two new features: <strong>Root Path URL<\/strong> and <strong>Dynamic SEO suffixes<\/strong>. These features can be useful for website as well as web application owners, and are especially recommended for content-heavy sites, like online magazines and news sites.<\/p>\n<h2>Root Path URLs<\/h2>\n<p>Cloudinary\u2019s image URLs are delivered via CDN and use folder names as their path prefixes. These include resource and image types, such as <code>\/image\/upload<\/code> and <code>\/raw\/upload<\/code>. The most popular prefix among Cloudinary\u2019s users includes <code>\/image\/upload<\/code> in its URL. Now, with Cloudinary\u2019s Root Path URL feature, the <code>\/image\/upload<\/code> section of URLs can be removed, solely leaving the image\u2019s public ID (file name) at the path\u2019s root.<\/p>\n<p>Below is an example of an image that was uploaded to Cloudinary and was assigned <code>basketball_shot<\/code> as the public ID:<\/p>\n<p><a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/basketball_shot.jpg\" title=\"with_code: false\">Basketball shot long URL<\/a><\/p>\n<p>And here is an example of a Cloudinary image URL that uses the Root Path URL feature:<\/p>\n<p><a href=\"https:\/\/res.cloudinary.com\/demo\/basketball_shot.jpg\">Basketball shot short URL<\/a><\/p>\n<p>Both URLs yield the same uploaded image:<\/p>\n<p><a class=\"c-image-link\" href=\"https:\/\/res.cloudinary.com\/demo\/basketball_shot.jpg\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/w_300\/basketball_shot.jpg\" alt=\"Basketball shot sample image\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"300\" height=\"200\"\/><\/a><\/p>\n<p>With the Root Path URL capability, users can also add parameters for <a href=\"https:\/\/cloudinary.com\/documentation\/image_transformations\">on-the-fly image transformation<\/a>. For example, if an uploaded image needs to be cropped to 200 x 200 pixels, it can be transformed simply by setting the width and height parameters to 200 and the crop mode to \u2018fill\u2019:<\/p>\n<p><cld-code-widget\n      class=\" c-code-widget\"\n      snippets=\"[{&quot;sdkId&quot;:&quot;nodejs&quot;,&quot;framework&quot;:&quot;nodejs&quot;,&quot;language&quot;:&quot;nodejs&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(\\&quot;basketball_shot.jpg\\&quot;, {width: 200, height: 200, crop: \\&quot;fill\\&quot;, use_root_path: true})&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(\\&quot;basketball_shot.jpg\\&quot;, {width: 200, height: 200, crop: \\&quot;fill\\&quot;, use_root_path: true})&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Node.js&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;react_2&quot;,&quot;framework&quot;:&quot;react_2&quot;,&quot;language&quot;:&quot;react&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/react&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;react&quot;,&quot;framework&quot;:&quot;react&quot;,&quot;language&quot;:&quot;react&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;Image publicId=\\&quot;basketball_shot.jpg\\&quot; useRootPath=\\&quot;true\\&quot;&gt; &lt;Transformation width=\\&quot;200\\&quot; height=\\&quot;200\\&quot; crop=\\&quot;fill\\&quot; \\\/&gt; &lt;\\\/Image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;Image publicId=\\&quot;basketball_shot.jpg\\&quot; useRootPath=\\&quot;true\\&quot;&gt;\\n\\t&lt;Transformation width=\\&quot;200\\&quot; height=\\&quot;200\\&quot; crop=\\&quot;fill\\&quot; \\\/&gt;\\n&lt;\\\/Image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React&quot;,&quot;packageName&quot;:&quot;cloudinary-react&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;vue_2&quot;,&quot;framework&quot;:&quot;vue_2&quot;,&quot;language&quot;:&quot;vue&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Vue.js&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/vue&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;vue&quot;,&quot;framework&quot;:&quot;vue&quot;,&quot;language&quot;:&quot;vue&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;cld-image public-id=\\&quot;basketball_shot.jpg\\&quot; use-root-path=\\&quot;true\\&quot;&gt; &lt;cld-transformation width=\\&quot;200\\&quot; height=\\&quot;200\\&quot; crop=\\&quot;fill\\&quot; \\\/&gt; &lt;\\\/cld-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cld-image public-id=\\&quot;basketball_shot.jpg\\&quot; use-root-path=\\&quot;true\\&quot;&gt;\\n\\t&lt;cld-transformation width=\\&quot;200\\&quot; height=\\&quot;200\\&quot; crop=\\&quot;fill\\&quot; \\\/&gt;\\n&lt;\\\/cld-image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Vue.js&quot;,&quot;packageName&quot;:&quot;cloudinary-vue&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;angular_2&quot;,&quot;framework&quot;:&quot;angular_2&quot;,&quot;language&quot;:&quot;angular&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Angular&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/ng&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;angular&quot;,&quot;framework&quot;:&quot;angular&quot;,&quot;language&quot;:&quot;angular&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;cl-image public-id=\\&quot;basketball_shot.jpg\\&quot; use-root-path=\\&quot;true\\&quot;&gt; &lt;cl-transformation width=\\&quot;200\\&quot; height=\\&quot;200\\&quot; crop=\\&quot;fill\\&quot;&gt; &lt;\\\/cl-transformation&gt; &lt;\\\/cl-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cl-image public-id=\\&quot;basketball_shot.jpg\\&quot; use-root-path=\\&quot;true\\&quot;&gt;\\n\\t&lt;cl-transformation width=\\&quot;200\\&quot; height=\\&quot;200\\&quot; crop=\\&quot;fill\\&quot;&gt;\\n\\t&lt;\\\/cl-transformation&gt;\\n&lt;\\\/cl-image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Angular&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/angular-5.x&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;js_2&quot;,&quot;framework&quot;:&quot;js_2&quot;,&quot;language&quot;:&quot;js&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;JS&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/url-gen&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;js&quot;,&quot;framework&quot;:&quot;js&quot;,&quot;language&quot;:&quot;js&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.imageTag(&#039;basketball_shot.jpg&#039;, {width: 200, height: 200, crop: \\&quot;fill\\&quot;, useRootPath: true}).toHtml();&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.imageTag(&#039;basketball_shot.jpg&#039;, {width: 200, height: 200, crop: \\&quot;fill\\&quot;, useRootPath: true}).toHtml();&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;JS&quot;,&quot;packageName&quot;:&quot;cloudinary-core&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;python&quot;,&quot;framework&quot;:&quot;python&quot;,&quot;language&quot;:&quot;python&quot;,&quot;rawCodeSnippet&quot;:&quot;CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).image(width=200, height=200, crop=\\&quot;fill\\&quot;, use_root_path=True)&quot;,&quot;codeSnippet&quot;:&quot;CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).image(width=200, height=200, crop=\\&quot;fill\\&quot;, use_root_path=True)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Python&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;php_2&quot;,&quot;framework&quot;:&quot;php_2&quot;,&quot;language&quot;:&quot;php&quot;,&quot;rawCodeSnippet&quot;:&quot;(new ImageTag(&#039;basketball_shot.jpg&#039;))\\n\\t-&gt;resize(Resize::fill()-&gt;width(200)\\n-&gt;height(200));&quot;,&quot;codeSnippet&quot;:&quot;(new ImageTag(&#039;basketball_shot.jpg&#039;))\\n\\t-&gt;resize(Resize::fill()-&gt;width(200)\\n-&gt;height(200));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;3.x&quot;},{&quot;sdkId&quot;:&quot;php&quot;,&quot;framework&quot;:&quot;php&quot;,&quot;language&quot;:&quot;php&quot;,&quot;rawCodeSnippet&quot;:&quot;cl_image_tag(\\&quot;basketball_shot.jpg\\&quot;, array(\\&quot;width\\&quot;=&gt;200, \\&quot;height\\&quot;=&gt;200, \\&quot;crop\\&quot;=&gt;\\&quot;fill\\&quot;, \\&quot;use_root_path\\&quot;=&gt;true))&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;basketball_shot.jpg\\&quot;, array(\\&quot;width\\&quot;=&gt;200, \\&quot;height\\&quot;=&gt;200, \\&quot;crop\\&quot;=&gt;\\&quot;fill\\&quot;, \\&quot;use_root_path\\&quot;=&gt;true))&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;java&quot;,&quot;framework&quot;:&quot;java&quot;,&quot;language&quot;:&quot;java&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().width(200).height(200).crop(\\&quot;fill\\&quot;)).useRootPath(true).imageTag(\\&quot;basketball_shot.jpg\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().width(200).height(200).crop(\\&quot;fill\\&quot;)).useRootPath(true).imageTag(\\&quot;basketball_shot.jpg\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Java&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;ruby&quot;,&quot;framework&quot;:&quot;ruby&quot;,&quot;language&quot;:&quot;ruby&quot;,&quot;rawCodeSnippet&quot;:&quot;cl_image_tag(\\&quot;basketball_shot.jpg\\&quot;, width: 200, height: 200, crop: \\&quot;fill\\&quot;, use_root_path: true)&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;basketball_shot.jpg\\&quot;, width: 200, height: 200, crop: \\&quot;fill\\&quot;, use_root_path: true)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Ruby&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;csharp&quot;,&quot;framework&quot;:&quot;csharp&quot;,&quot;language&quot;:&quot;csharp&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.Api.UrlImgUp.Transform(new Transformation().Width(200).Height(200).Crop(\\&quot;fill\\&quot;)).UseRootPath(true).BuildImageTag(\\&quot;basketball_shot.jpg\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.Api.UrlImgUp.Transform(new Transformation().Width(200).Height(200).Crop(\\&quot;fill\\&quot;)).UseRootPath(true).BuildImageTag(\\&quot;basketball_shot.jpg\\&quot;)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;.NET&quot;,&quot;packageName&quot;:&quot;CloudinaryDotNet&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;dart&quot;,&quot;framework&quot;:&quot;dart&quot;,&quot;language&quot;:&quot;dart&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(&#039;basketball_shot.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.fill().width(200)\\n.height(200)));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;basketball_shot.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.fill().width(200)\\n.height(200)));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Dart&quot;,&quot;packageName&quot;:&quot;cloudinary_dart&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;swift&quot;,&quot;framework&quot;:&quot;swift&quot;,&quot;language&quot;:&quot;swift&quot;,&quot;rawCodeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setUseRootPath( true).setTransformation(CLDTransformation().setWidth(200).setHeight(200).setCrop(\\&quot;fill\\&quot;)).generate(\\&quot;basketball_shot.jpg\\&quot;)!, cloudinary: cloudinary)&quot;,&quot;codeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setUseRootPath( true).setTransformation(CLDTransformation().setWidth(200).setHeight(200).setCrop(\\&quot;fill\\&quot;)).generate(\\&quot;basketball_shot.jpg\\&quot;)!, cloudinary: cloudinary)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;iOS&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;5.x&quot;},{&quot;sdkId&quot;:&quot;android&quot;,&quot;framework&quot;:&quot;android&quot;,&quot;language&quot;:&quot;android&quot;,&quot;rawCodeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation().width(200).height(200).crop(\\&quot;fill\\&quot;)).useRootPath(true).generate(\\&quot;basketball_shot.jpg\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation().width(200).height(200).crop(\\&quot;fill\\&quot;)).useRootPath(true).generate(\\&quot;basketball_shot.jpg\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Android&quot;,&quot;packageName&quot;:&quot;cloudinary-android&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;3.x&quot;},{&quot;sdkId&quot;:&quot;flutter&quot;,&quot;framework&quot;:&quot;flutter&quot;,&quot;language&quot;:&quot;flutter&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(&#039;basketball_shot.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.fill().width(200)\\n.height(200)));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;basketball_shot.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.fill().width(200)\\n.height(200)));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Flutter&quot;,&quot;packageName&quot;:&quot;cloudinary_flutter&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;kotlin&quot;,&quot;framework&quot;:&quot;kotlin&quot;,&quot;language&quot;:&quot;kotlin&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image {\\n\\tpublicId(\\&quot;basketball_shot.jpg\\&quot;)\\n\\t resize(Resize.fill() { width(200)\\n height(200) }) \\n}.generate()&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image {\\n\\tpublicId(\\&quot;basketball_shot.jpg\\&quot;)\\n\\t resize(Resize.fill() { width(200)\\n height(200) }) \\n}.generate()&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Kotlin&quot;,&quot;packageName&quot;:&quot;kotlin-url-gen&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;jquery&quot;,&quot;framework&quot;:&quot;jquery&quot;,&quot;language&quot;:&quot;jquery&quot;,&quot;rawCodeSnippet&quot;:&quot;$.cloudinary.image(\\&quot;basketball_shot.jpg\\&quot;, {width: 200, height: 200, crop: \\&quot;fill\\&quot;, use_root_path: true})&quot;,&quot;codeSnippet&quot;:&quot;$.cloudinary.image(\\&quot;basketball_shot.jpg\\&quot;, {width: 200, height: 200, crop: \\&quot;fill\\&quot;, use_root_path: true})&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;jQuery&quot;,&quot;packageName&quot;:&quot;cloudinary-jquery&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;react_native&quot;,&quot;framework&quot;:&quot;react_native&quot;,&quot;language&quot;:&quot;react_native&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React Native&quot;,&quot;packageName&quot;:&quot;cloudinary-react-native&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;}]\"\n      parsed-url=\"{&quot;url&quot;:&quot;https:\\\/\\\/res.cloudinary.com\\\/demo\\\/w_200,h_200,c_fill\\\/basketball_shot.jpg&quot;,&quot;cloud_name&quot;:&quot;demo&quot;,&quot;host&quot;:&quot;res.cloudinary.com&quot;,&quot;type&quot;:&quot;upload&quot;,&quot;resource_type&quot;:&quot;image&quot;,&quot;transformation&quot;:[{&quot;width&quot;:&quot;200&quot;,&quot;height&quot;:&quot;200&quot;,&quot;crop_mode&quot;:&quot;fill&quot;}],&quot;transformation_string&quot;:&quot;w_200,h_200,c_fill&quot;,&quot;url_suffix&quot;:&quot;&quot;,&quot;version&quot;:&quot;&quot;,&quot;secure&quot;:true,&quot;public_id&quot;:&quot;basketball_shot.jpg&quot;,&quot;extension&quot;:&quot;jpg&quot;,&quot;format&quot;:&quot;jpg&quot;,&quot;format_code&quot;:true,&quot;url_code&quot;:false,&quot;signature&quot;:&quot;&quot;,&quot;private_cdn&quot;:false,&quot;result_asset_type&quot;:&quot;image&quot;}\"\n      with-url=\"true\"\n    >\n      <span class=\"u-visually-hidden\">Loading code examples<\/span>\n    <\/cld-code-widget><a class=\"c-image-link\" href=\"https:\/\/res.cloudinary.com\/demo\/w_200,h_200,c_fill\/basketball_shot.jpg\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/w_200,h_200,c_fill\/basketball_shot.jpg\" alt=\"200x200 basketball shot thumbnail\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"200\" height=\"200\"\/><\/a><\/p>\n<p>When using Cloudinary\u2019s client libraries (SDKs) to build delivery URLs and to add image tags, you simply need to set the new parameter, <code>use_root_path<\/code>, to <code>true<\/code>.<\/p>\n<p>The following code sample was used to create an HTML image tag with an <a href=\"https:\/\/cloudinary.com\/glossary\/image-url\">image URL<\/a> using the Root Path URL feature:<\/p>\n<p><cld-code-widget\n      class=\" c-code-widget\"\n      snippets=\"[{&quot;sdkId&quot;:&quot;nodejs&quot;,&quot;framework&quot;:&quot;nodejs&quot;,&quot;language&quot;:&quot;nodejs&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(\\&quot;basketball_shot.jpg\\&quot;, {width: 200, height: 200, crop: \\&quot;fill\\&quot;, use_root_path: true})&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(\\&quot;basketball_shot.jpg\\&quot;, {width: 200, height: 200, crop: \\&quot;fill\\&quot;, use_root_path: true})&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Node.js&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;react_2&quot;,&quot;framework&quot;:&quot;react_2&quot;,&quot;language&quot;:&quot;react&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/react&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;react&quot;,&quot;framework&quot;:&quot;react&quot;,&quot;language&quot;:&quot;react&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;Image publicId=\\&quot;basketball_shot.jpg\\&quot; useRootPath=\\&quot;true\\&quot;&gt; &lt;Transformation width=\\&quot;200\\&quot; height=\\&quot;200\\&quot; crop=\\&quot;fill\\&quot; \\\/&gt; &lt;\\\/Image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;Image publicId=\\&quot;basketball_shot.jpg\\&quot; useRootPath=\\&quot;true\\&quot;&gt;\\n\\t&lt;Transformation width=\\&quot;200\\&quot; height=\\&quot;200\\&quot; crop=\\&quot;fill\\&quot; \\\/&gt;\\n&lt;\\\/Image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React&quot;,&quot;packageName&quot;:&quot;cloudinary-react&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;vue_2&quot;,&quot;framework&quot;:&quot;vue_2&quot;,&quot;language&quot;:&quot;vue&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Vue.js&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/vue&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;vue&quot;,&quot;framework&quot;:&quot;vue&quot;,&quot;language&quot;:&quot;vue&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;cld-image public-id=\\&quot;basketball_shot.jpg\\&quot; use-root-path=\\&quot;true\\&quot;&gt; &lt;cld-transformation width=\\&quot;200\\&quot; height=\\&quot;200\\&quot; crop=\\&quot;fill\\&quot; \\\/&gt; &lt;\\\/cld-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cld-image public-id=\\&quot;basketball_shot.jpg\\&quot; use-root-path=\\&quot;true\\&quot;&gt;\\n\\t&lt;cld-transformation width=\\&quot;200\\&quot; height=\\&quot;200\\&quot; crop=\\&quot;fill\\&quot; \\\/&gt;\\n&lt;\\\/cld-image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Vue.js&quot;,&quot;packageName&quot;:&quot;cloudinary-vue&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;angular_2&quot;,&quot;framework&quot;:&quot;angular_2&quot;,&quot;language&quot;:&quot;angular&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Angular&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/ng&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;angular&quot;,&quot;framework&quot;:&quot;angular&quot;,&quot;language&quot;:&quot;angular&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;cl-image public-id=\\&quot;basketball_shot.jpg\\&quot; use-root-path=\\&quot;true\\&quot;&gt; &lt;cl-transformation width=\\&quot;200\\&quot; height=\\&quot;200\\&quot; crop=\\&quot;fill\\&quot;&gt; &lt;\\\/cl-transformation&gt; &lt;\\\/cl-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cl-image public-id=\\&quot;basketball_shot.jpg\\&quot; use-root-path=\\&quot;true\\&quot;&gt;\\n\\t&lt;cl-transformation width=\\&quot;200\\&quot; height=\\&quot;200\\&quot; crop=\\&quot;fill\\&quot;&gt;\\n\\t&lt;\\\/cl-transformation&gt;\\n&lt;\\\/cl-image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Angular&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/angular-5.x&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;js_2&quot;,&quot;framework&quot;:&quot;js_2&quot;,&quot;language&quot;:&quot;js&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;JS&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/url-gen&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;js&quot;,&quot;framework&quot;:&quot;js&quot;,&quot;language&quot;:&quot;js&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.imageTag(&#039;basketball_shot.jpg&#039;, {width: 200, height: 200, crop: \\&quot;fill\\&quot;, useRootPath: true}).toHtml();&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.imageTag(&#039;basketball_shot.jpg&#039;, {width: 200, height: 200, crop: \\&quot;fill\\&quot;, useRootPath: true}).toHtml();&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;JS&quot;,&quot;packageName&quot;:&quot;cloudinary-core&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;python&quot;,&quot;framework&quot;:&quot;python&quot;,&quot;language&quot;:&quot;python&quot;,&quot;rawCodeSnippet&quot;:&quot;CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).image(width=200, height=200, crop=\\&quot;fill\\&quot;, use_root_path=True)&quot;,&quot;codeSnippet&quot;:&quot;CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).image(width=200, height=200, crop=\\&quot;fill\\&quot;, use_root_path=True)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Python&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;php_2&quot;,&quot;framework&quot;:&quot;php_2&quot;,&quot;language&quot;:&quot;php&quot;,&quot;rawCodeSnippet&quot;:&quot;(new ImageTag(&#039;basketball_shot.jpg&#039;))\\n\\t-&gt;resize(Resize::fill()-&gt;width(200)\\n-&gt;height(200));&quot;,&quot;codeSnippet&quot;:&quot;(new ImageTag(&#039;basketball_shot.jpg&#039;))\\n\\t-&gt;resize(Resize::fill()-&gt;width(200)\\n-&gt;height(200));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;3.x&quot;},{&quot;sdkId&quot;:&quot;php&quot;,&quot;framework&quot;:&quot;php&quot;,&quot;language&quot;:&quot;php&quot;,&quot;rawCodeSnippet&quot;:&quot;cl_image_tag(\\&quot;basketball_shot.jpg\\&quot;, array(\\&quot;width\\&quot;=&gt;200, \\&quot;height\\&quot;=&gt;200, \\&quot;crop\\&quot;=&gt;\\&quot;fill\\&quot;, \\&quot;use_root_path\\&quot;=&gt;true))&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;basketball_shot.jpg\\&quot;, array(\\&quot;width\\&quot;=&gt;200, \\&quot;height\\&quot;=&gt;200, \\&quot;crop\\&quot;=&gt;\\&quot;fill\\&quot;, \\&quot;use_root_path\\&quot;=&gt;true))&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;java&quot;,&quot;framework&quot;:&quot;java&quot;,&quot;language&quot;:&quot;java&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().width(200).height(200).crop(\\&quot;fill\\&quot;)).useRootPath(true).imageTag(\\&quot;basketball_shot.jpg\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().width(200).height(200).crop(\\&quot;fill\\&quot;)).useRootPath(true).imageTag(\\&quot;basketball_shot.jpg\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Java&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;ruby&quot;,&quot;framework&quot;:&quot;ruby&quot;,&quot;language&quot;:&quot;ruby&quot;,&quot;rawCodeSnippet&quot;:&quot;cl_image_tag(\\&quot;basketball_shot.jpg\\&quot;, width: 200, height: 200, crop: \\&quot;fill\\&quot;, use_root_path: true)&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;basketball_shot.jpg\\&quot;, width: 200, height: 200, crop: \\&quot;fill\\&quot;, use_root_path: true)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Ruby&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;csharp&quot;,&quot;framework&quot;:&quot;csharp&quot;,&quot;language&quot;:&quot;csharp&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.Api.UrlImgUp.Transform(new Transformation().Width(200).Height(200).Crop(\\&quot;fill\\&quot;)).UseRootPath(true).BuildImageTag(\\&quot;basketball_shot.jpg\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.Api.UrlImgUp.Transform(new Transformation().Width(200).Height(200).Crop(\\&quot;fill\\&quot;)).UseRootPath(true).BuildImageTag(\\&quot;basketball_shot.jpg\\&quot;)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;.NET&quot;,&quot;packageName&quot;:&quot;CloudinaryDotNet&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;dart&quot;,&quot;framework&quot;:&quot;dart&quot;,&quot;language&quot;:&quot;dart&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(&#039;basketball_shot.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.fill().width(200)\\n.height(200)));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;basketball_shot.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.fill().width(200)\\n.height(200)));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Dart&quot;,&quot;packageName&quot;:&quot;cloudinary_dart&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;swift&quot;,&quot;framework&quot;:&quot;swift&quot;,&quot;language&quot;:&quot;swift&quot;,&quot;rawCodeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setUseRootPath( true).setTransformation(CLDTransformation().setWidth(200).setHeight(200).setCrop(\\&quot;fill\\&quot;)).generate(\\&quot;basketball_shot.jpg\\&quot;)!, cloudinary: cloudinary)&quot;,&quot;codeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setUseRootPath( true).setTransformation(CLDTransformation().setWidth(200).setHeight(200).setCrop(\\&quot;fill\\&quot;)).generate(\\&quot;basketball_shot.jpg\\&quot;)!, cloudinary: cloudinary)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;iOS&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;5.x&quot;},{&quot;sdkId&quot;:&quot;android&quot;,&quot;framework&quot;:&quot;android&quot;,&quot;language&quot;:&quot;android&quot;,&quot;rawCodeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation().width(200).height(200).crop(\\&quot;fill\\&quot;)).useRootPath(true).generate(\\&quot;basketball_shot.jpg\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation().width(200).height(200).crop(\\&quot;fill\\&quot;)).useRootPath(true).generate(\\&quot;basketball_shot.jpg\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Android&quot;,&quot;packageName&quot;:&quot;cloudinary-android&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;3.x&quot;},{&quot;sdkId&quot;:&quot;flutter&quot;,&quot;framework&quot;:&quot;flutter&quot;,&quot;language&quot;:&quot;flutter&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(&#039;basketball_shot.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.fill().width(200)\\n.height(200)));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;basketball_shot.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.fill().width(200)\\n.height(200)));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Flutter&quot;,&quot;packageName&quot;:&quot;cloudinary_flutter&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;kotlin&quot;,&quot;framework&quot;:&quot;kotlin&quot;,&quot;language&quot;:&quot;kotlin&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image {\\n\\tpublicId(\\&quot;basketball_shot.jpg\\&quot;)\\n\\t resize(Resize.fill() { width(200)\\n height(200) }) \\n}.generate()&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image {\\n\\tpublicId(\\&quot;basketball_shot.jpg\\&quot;)\\n\\t resize(Resize.fill() { width(200)\\n height(200) }) \\n}.generate()&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Kotlin&quot;,&quot;packageName&quot;:&quot;kotlin-url-gen&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;jquery&quot;,&quot;framework&quot;:&quot;jquery&quot;,&quot;language&quot;:&quot;jquery&quot;,&quot;rawCodeSnippet&quot;:&quot;$.cloudinary.image(\\&quot;basketball_shot.jpg\\&quot;, {width: 200, height: 200, crop: \\&quot;fill\\&quot;, use_root_path: true})&quot;,&quot;codeSnippet&quot;:&quot;$.cloudinary.image(\\&quot;basketball_shot.jpg\\&quot;, {width: 200, height: 200, crop: \\&quot;fill\\&quot;, use_root_path: true})&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;jQuery&quot;,&quot;packageName&quot;:&quot;cloudinary-jquery&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;react_native&quot;,&quot;framework&quot;:&quot;react_native&quot;,&quot;language&quot;:&quot;react_native&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;basketball_shot.jpg\\&quot;).resize(\\n  fill().width(200).height(200)\\n);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React Native&quot;,&quot;packageName&quot;:&quot;cloudinary-react-native&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;}]\"\n      parsed-url=\"{&quot;url&quot;:&quot;https:\\\/\\\/res.cloudinary.com\\\/demo\\\/w_200,h_200,c_fill\\\/basketball_shot.jpg&quot;,&quot;cloud_name&quot;:&quot;demo&quot;,&quot;host&quot;:&quot;res.cloudinary.com&quot;,&quot;type&quot;:&quot;upload&quot;,&quot;resource_type&quot;:&quot;image&quot;,&quot;transformation&quot;:[{&quot;width&quot;:&quot;200&quot;,&quot;height&quot;:&quot;200&quot;,&quot;crop_mode&quot;:&quot;fill&quot;}],&quot;transformation_string&quot;:&quot;w_200,h_200,c_fill&quot;,&quot;url_suffix&quot;:&quot;&quot;,&quot;version&quot;:&quot;&quot;,&quot;secure&quot;:true,&quot;public_id&quot;:&quot;basketball_shot.jpg&quot;,&quot;extension&quot;:&quot;jpg&quot;,&quot;format&quot;:&quot;jpg&quot;,&quot;format_code&quot;:true,&quot;url_code&quot;:false,&quot;signature&quot;:&quot;&quot;,&quot;private_cdn&quot;:false,&quot;result_asset_type&quot;:&quot;image&quot;}\"\n      with-url=\"false\"\n    >\n      <span class=\"u-visually-hidden\">Loading code examples<\/span>\n    <\/cld-code-widget><\/p>\n<h2>Dynamic SEO Suffixes<\/h2>\n<p>Many of our users have requested a Cloudinary capability that creates image URLs that are more comprehensive and descriptive. Each image uploaded to Cloudinary is given a public ID, which is its name for delivery URLs. Cloudinary already offers the ability to define custom public IDs with a string of text or multiple folder names (separated by slashes), while uploading images. These public IDs can be as descriptive as necessary.<\/p>\n<p>Our new feature allows you to separate the process of uploading an image and assigning a public ID from creating descriptive URLs. If an image is not given a suitable name during the <a href=\"https:\/\/cloudinary.com\/blog\/automating_file_upload_and_sharing\">file upload<\/a> process, you will be able to assign additional URLs to the image afterwards. For example, with this feature, you can dynamically add multiple different suffixes to create as many descriptive URLs as necessary for your site. You may want to use these URLs to support different languages for a single image or to reflect specific content on certain pages.<\/p>\n<p>To add a dynamic SEO suffix, an image\u2019s path prefix must first be changed from the default <code>\/image\/upload<\/code> to the shorter version <code>\/images<\/code>.<\/p>\n<p>Here is an example of an image that was uploaded with the ID <code>ltepu4mm0qzw6lkfxt1m<\/code> and is delivered by the following CDN optimized URL using a standard path prefix:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/demo-res.cloudinary.com\/image\/upload\/w_300\/ltepu4mm0qzw6lkfxt1m.jpg\" alt=\"Image delivery\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"300\" height=\"199\"\/><\/p>\n<p>Below, the suffix <code>basketball-game-in-college<\/code> was added, which is the text that search engines use to index the page and image:<\/p>\n<p><a href=\"https:\/\/demo-res.cloudinary.com\/images\/ltepu4mm0qzw6lkfxt1m\/basketball-game-in-college.jpg\">Image with a dynamic SEO suffix<\/a><\/p>\n<p>In the URL below, the same image is given an additional, separate suffix in Spanish:<\/p>\n<p><a href=\"https:\/\/demo-res.cloudinary.com\/images\/ltepu4mm0qzw6lkfxt1m\/baloncesto-juego-en-universidad.jpg\">Image with a dynamic SEO suffix in Spanish<\/a><\/p>\n<p>Additional <a href=\"https:\/\/cloudinary.com\/documentation\/image_transformations\">image transformations<\/a> can be easily made by adding parameters to Cloudinary\u2019s on-the-fly transformation URLs. Here, the same image is transformed to a 200 x 200 pixel crop with rounded corners and increased saturation:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/demo-res.cloudinary.com\/images\/w_200,h_200,c_fill,g_west,r_30,e_saturation:50\/ltepu4mm0qzw6lkfxt1m\/basketball-game-in-college.jpg\" alt=\"200x200 thumbnail with dynamic SEO suffix\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"200\" height=\"200\"\/><\/p>\n<p>This capability is also applicable for private images and non-image raw file uploads. For raw files, the resource type <code>\/raw\/upload<\/code> should be replaced by <code>\/files<\/code>, and for private images, the resource type and type <code>\/image\/private<\/code> should be replaced by <code>\/private_images<\/code>. When using Cloudinary\u2019s SDK for various development frameworks, set the new <code>url_suffix<\/code> parameter to any text, and the URLs will be built automatically with either a <code>\/files<\/code> or <code>\/private_images<\/code>prefix, as well as the added suffix.<\/p>\n<h2>Use Your Own Domain<\/h2>\n<p>You can also make SEO friendly URLs by using a custom domain (CNAME) for your URLs instead of the shared <code>res.cloudinary.com<\/code>. The SEO URL suffix and CNAME features can also be used together, for example:<\/p>\n<p><code>https:\/\/images.mydomain.com\/w_200\/afe6c8e2ca\/basktetball-game.jpg<\/code><\/p>\n<p>Note that in order to use the SEO URL suffix or CNAME features, your account needs to be setup with a private CDN configuration which is only supported for the Advanced plan or higher.\nWe invite you to <a href=\"https:\/\/cloudinary.com\/contact\">contact us<\/a> to setup these advanced features.<\/p>\n<p><strong>Update<\/strong> (27\/02\/2017): The <a href=\"https:\/\/cloudinary.com\/glossary\/dynamic-text\">dynamic<\/a> SEO URL suffix feature is now available for all plans and no longer requires a private CDN configuration.<\/p>\n<h2>Summary<\/h2>\n<p>With these two capabilities, Cloudinary aims to help you easily create advanced image transformation and delivery URLs to better optimize your site for search engines. Cloudinary users can use both the Root Path URLs and Dynamic SEO Suffix features together to build a short and descriptive image URL. The Root Path URL capability is available for all accounts, including the free tier, and the Dynamic SEO Suffix capability is available with <a href=\"https:\/\/cloudinary.com\/pricing\">Cloudinary\u2019s Advanced Plan<\/a> or higher with a private CDN setup.<\/p>\n<p>If you don\u2019t have a Cloudinary account yet, we invite you <a href=\"https:\/\/cloudinary.com\/users\/register_free\">sign up for a free account here<\/a>.<\/p>\n<\/div>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":23342,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[25,91,92,119,177,214,229,257],"class_list":["post-21273","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-asset-management","tag-django","tag-dotnet","tag-file-upload","tag-javascript","tag-node","tag-php","tag-ruby-on-rails"],"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>Dynamically Create SEO Friendly URLs for Your Images<\/title>\n<meta name=\"description\" content=\"Learn how to enhance your site&#039;s SEO ranking and organic traffic by maintaining concise, meaningful and customized image URLs automatically.\" \/>\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\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to dynamically create SEO friendly URLs for your site&#039;s images\" \/>\n<meta property=\"og:description\" content=\"Learn how to enhance your site&#039;s SEO ranking and organic traffic by maintaining concise, meaningful and customized image URLs automatically.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-03-11T15:39:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-06T18:38:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1647045694\/28_SEO_friendly_URLs\/28_SEO_friendly_URLs-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=\"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\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"How to dynamically create SEO friendly URLs for your site&#039;s images\",\"datePublished\":\"2015-03-11T15:39:40+00:00\",\"dateModified\":\"2025-06-06T18:38:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images\"},\"wordCount\":12,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647045694\/28_SEO_friendly_URLs\/28_SEO_friendly_URLs.jpg?_i=AA\",\"keywords\":[\"Asset Management\",\"Django\",\"DotNet\",\"File-upload\",\"Javascript\",\"Node\",\"PHP\",\"Ruby on Rails\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2015\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images\",\"url\":\"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images\",\"name\":\"Dynamically Create SEO Friendly URLs for Your Images\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647045694\/28_SEO_friendly_URLs\/28_SEO_friendly_URLs.jpg?_i=AA\",\"datePublished\":\"2015-03-11T15:39:40+00:00\",\"dateModified\":\"2025-06-06T18:38:23+00:00\",\"description\":\"Learn how to enhance your site's SEO ranking and organic traffic by maintaining concise, meaningful and customized image URLs automatically.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647045694\/28_SEO_friendly_URLs\/28_SEO_friendly_URLs.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647045694\/28_SEO_friendly_URLs\/28_SEO_friendly_URLs.jpg?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to dynamically create SEO friendly URLs for your site&#039;s images\"}]},{\"@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\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Dynamically Create SEO Friendly URLs for Your Images","description":"Learn how to enhance your site's SEO ranking and organic traffic by maintaining concise, meaningful and customized image URLs automatically.","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\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images","og_locale":"en_US","og_type":"article","og_title":"How to dynamically create SEO friendly URLs for your site&#039;s images","og_description":"Learn how to enhance your site's SEO ranking and organic traffic by maintaining concise, meaningful and customized image URLs automatically.","og_url":"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images","og_site_name":"Cloudinary Blog","article_published_time":"2015-03-11T15:39:40+00:00","article_modified_time":"2025-06-06T18:38:23+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1647045694\/28_SEO_friendly_URLs\/28_SEO_friendly_URLs-jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images"},"author":{"name":"","@id":""},"headline":"How to dynamically create SEO friendly URLs for your site&#039;s images","datePublished":"2015-03-11T15:39:40+00:00","dateModified":"2025-06-06T18:38:23+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images"},"wordCount":12,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647045694\/28_SEO_friendly_URLs\/28_SEO_friendly_URLs.jpg?_i=AA","keywords":["Asset Management","Django","DotNet","File-upload","Javascript","Node","PHP","Ruby on Rails"],"inLanguage":"en-US","copyrightYear":"2015","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images","url":"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images","name":"Dynamically Create SEO Friendly URLs for Your Images","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647045694\/28_SEO_friendly_URLs\/28_SEO_friendly_URLs.jpg?_i=AA","datePublished":"2015-03-11T15:39:40+00:00","dateModified":"2025-06-06T18:38:23+00:00","description":"Learn how to enhance your site's SEO ranking and organic traffic by maintaining concise, meaningful and customized image URLs automatically.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647045694\/28_SEO_friendly_URLs\/28_SEO_friendly_URLs.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647045694\/28_SEO_friendly_URLs\/28_SEO_friendly_URLs.jpg?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/how_to_dynamically_create_seo_friendly_urls_for_your_site_s_images#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to dynamically create SEO friendly URLs for your site&#039;s images"}]},{"@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":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647045694\/28_SEO_friendly_URLs\/28_SEO_friendly_URLs.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21273","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\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=21273"}],"version-history":[{"count":10,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21273\/revisions"}],"predecessor-version":[{"id":37748,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21273\/revisions\/37748"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/23342"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=21273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=21273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=21273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}