{"id":28042,"date":"2022-06-10T07:39:38","date_gmt":"2022-06-10T07:39:38","guid":{"rendered":"http:\/\/how-to-lazyload-images-in-plain-html"},"modified":"2025-09-26T13:52:03","modified_gmt":"2025-09-26T20:52:03","slug":"how-to-lazyload-images-in-plain-html","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/","title":{"rendered":"How to Lazy Load Images in Plain HTML"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>Most websites contain images that contribute to high data usage and slow page loads. It is impossible to do away with photos on websites; therefore, page load speeds must be improved.<\/p>\n<p>Image lazy loading is a method of identifying resources (images) as non-critical until they\u2019re needed. For example, a page wouldn\u2019t load an image if it is not in the user\u2019s viewport. The image will get loaded only when a user scrolls to it. Lazy loading does not reduce the image quality but improves the page load time by rendering resources only when needed.<\/p>\n<p>Demo and source code<\/p>\n<p>We completed this project in <a href=\"https:\/\/codesandbox.io\/embed\/lazyload-in-plain-html-o53mq0?fontsize=14&amp;hidenavigation=1&amp;theme=dark\">CodeSandbox<\/a>. Fork and run it to quickly get started.<\/p>\n<\/div>\n\n\n  <div class=\"wp-block-cloudinary-code-sandbox \">\n    <iframe\n      src=\"https:\/\/codesandbox.io\/embed\/lazyload-in-plain-html-o53mq0?theme=dark&amp;codemirror=1&amp;highlights=&amp;editorsize=50&amp;fontsize=14&amp;expanddevtools=0&amp;hidedevtools=0&amp;eslint=0&amp;forcerefresh=0&amp;hidenavigation=0&amp;initialpath=%2F&amp;module=&amp;moduleview=0&amp;previewwindow=&amp;view=&amp;runonclick=1\"\n      height=\"500\"\n      style=\"width: 100%;\"\n      title=\"How To Lazyload Images in Plain HTML\"\n      loading=\"lazy\"\n      allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n      sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n    ><\/iframe>\n  <\/div>\n\n\n<div class=\"wp-block-cloudinary-markdown \"><p>The source code is available on <a href=\"https:\/\/github.com\/achingachris\/lazyload-images-html\">GitHub<\/a>.<\/p>\n<h2>Lazy loading images in HTML<\/h2>\n<blockquote>\n<p>NB:\nNo extra skills or technical requirements are needed!<\/p>\n<\/blockquote>\n<p>HTML provides a native way of lazy loading images using the <code>&lt;img&gt;<\/code> tag. Here is what a simple <code>&lt;img&gt;<\/code> tag would look like:<\/p>\n<pre class=\"js-syntax-highlighted\"><code>&lt;img src=&quot;https:\/\/res.cloudinary.com\/chris101\/image\/upload\/v1647634705\/kq.jpg&quot; class=&quot;img-fluid&quot; alt=&quot;an image with a title&quot; \/&gt;\n<\/code><\/pre>\n<p>To enable lazyload, we will introduce the loading attribute. Assigning \u201clazy\u201d to the <code>loading<\/code> attribute instructs the browser not to load images that are not on the viewport until a user scrolls near them:<\/p>\n<p><code>loading=&quot;lazy&quot;<\/code><\/p>\n<pre class=\"js-syntax-highlighted\" 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\">\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img<\/span>\n  <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/chris101\/image\/upload\/v1647634707\/delta.jpg\"<\/span>\n  <span class=\"hljs-attr\">loading<\/span>=<span class=\"hljs-string\">\"lazy\"<\/span>\n\/&gt;<\/span>\n<\/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<p>To test whether the lazyload works as intended, we will use the developer tools provided by popular browsers. We will be using <a href=\"https:\/\/www.google.com\/chrome\/\">Google Chrome<\/a> for the demo.\nWe will use the demo code below:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-meta\">&lt;!DOCTYPE <span class=\"hljs-meta-keyword\">html<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">html<\/span> <span class=\"hljs-attr\">lang<\/span>=<span class=\"hljs-string\">\"en\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">charset<\/span>=<span class=\"hljs-string\">\"UTF-8\"<\/span> \/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">http-equiv<\/span>=<span class=\"hljs-string\">\"X-UA-Compatible\"<\/span> <span class=\"hljs-attr\">content<\/span>=<span class=\"hljs-string\">\"IE=edge\"<\/span> \/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"viewport\"<\/span> <span class=\"hljs-attr\">content<\/span>=<span class=\"hljs-string\">\"width=device-width, initial-scale=1.0\"<\/span> \/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">title<\/span>&gt;<\/span>images lazyload<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">title<\/span>&gt;<\/span>\n    <span class=\"hljs-comment\">&lt;!-- CSS only --&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">link<\/span>\n      <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.2.0-beta1\/dist\/css\/bootstrap.min.css\"<\/span>\n      <span class=\"hljs-attr\">rel<\/span>=<span class=\"hljs-string\">\"stylesheet\"<\/span>\n      <span class=\"hljs-attr\">integrity<\/span>=<span class=\"hljs-string\">\"sha384-0evHe\/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\"<\/span>\n      <span class=\"hljs-attr\">crossorigin<\/span>=<span class=\"hljs-string\">\"anonymous\"<\/span>\n    \/&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">main<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"container m-3 align-items-center justify-content-center\"<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h1<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"text-center\"<\/span>&gt;<\/span>Lazy Load HTML<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h1<\/span>&gt;<\/span>\n\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img<\/span>\n        <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/chris101\/image\/upload\/v1647634705\/kq.jpg\"<\/span>\n        <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"img-fluid\"<\/span>\n        <span class=\"hljs-attr\">alt<\/span>=<span class=\"hljs-string\">\"\"<\/span>\n      \/&gt;<\/span>\n\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"text-center text-mute\"<\/span>&gt;<\/span>\n        Lorem ipsum dolor sit amet consectetur, adipisicing elit. Dolor\n        recusandae quibusdam accusamus culpa. Odit sit vero modi temporibus\n        velit perspiciatis ullam tempora quo rerum praesentium, facilis, minus\n        eaque enim illo necessitatibus eligendi ex tenetur, unde porro est eius?\n        Soluta cupiditate possimus hic exercitationem expedita animi repellat\n        debitis, molestiae quo eligendi blanditiis at minima quaerat?\n        Accusantium dolorum necessitatibus, doloremque itaque quos id tempore\n        sed fuga sit aliquam nulla? Officiis iusto consequuntur maxime ab\n        accusamus omnis possimus quo aperiam sapiente quasi impedit accusantium\n        harum necessitatibus deleniti tempore tempora hic molestiae ex\n        consectetur nisi, exercitationem placeat amet eum! Reiciendis\n        perspiciatis commodi qui. Dignissimos autem sint quis alias non, soluta,\n        nam quasi cupiditate nulla hic similique eius culpa tempora, ex qui nemo\n        vero vel atque minus dolores voluptate labore totam quidem! Repellat\n        harum quos amet, nisi ducimus deleniti illum, quas quaerat ipsum\n        incidunt consequuntur earum. Suscipit earum error quo corporis\n        aspernatur, dolores neque libero, maxime totam reiciendis iusto\n        quibusdam maiores. Earum sapiente aut, adipisci quae, eaque quis iure\n        tempora consequatur doloremque facilis esse totam. Consectetur autem\n        incidunt accusantium rerum asperiores quos ipsum iste iure, deserunt\n        magni assumenda minima modi id ipsam tempore, voluptatibus quisquam.\n        Molestiae, quam minus repudiandae quae suscipit iusto praesentium\n        obcaecati sint eligendi ducimus! Animi, suscipit. Pariatur molestiae\n        maiores quia, dolore voluptates obcaecati blanditiis voluptas aliquam\n        quos rerum voluptatem eaque hic architecto soluta totam nisi\n        necessitatibus! Accusantium veniam officiis inventore eaque eligendi\n        molestias ad dolorum alias quisquam iste. Cumque nostrum quidem\n        exercitationem quod nisi repellat laborum sit at recusandae modi\n        accusantium iure dolorem provident, aut facilis hic odit? Suscipit et\n        atque nesciunt. Eaque autem explicabo maiores animi quidem quae,\n        aspernatur exercitationem eius sint ullam reprehenderit ratione officia\n        quos aut atque quia. At, in cum! Unde totam quibusdam sequi dolore eum\n        ipsa ex minima adipisci culpa tempora rem autem voluptatem, provident\n        ducimus error reiciendis atque maxime dolorem quae aliquam dolores ad\n        odit numquam esse? Cumque necessitatibus optio illo asperiores inventore\n        rerum blanditiis voluptatum quasi provident cupiditate eaque eligendi\n        distinctio nemo reprehenderit doloremque totam explicabo, incidunt ullam\n        perferendis facere aperiam a porro voluptates repellendus! Veniam vel\n        quis autem delectus libero ab, assumenda placeat esse nisi non? Esse,\n        corrupti incidunt similique impedit sapiente blanditiis, iure\n        consequuntur voluptate quod, quas dicta laboriosam rem at? Atque\n        necessitatibus veritatis, commodi a reprehenderit tenetur alias nostrum\n        odit quis rerum iusto esse eius nulla tempore voluptatibus nesciunt eos\n        illo! Error a necessitatibus voluptatibus aperiam, sapiente minus fugit\n        voluptas tempora corrupti debitis dolores eum labore quasi. Neque, nam\n        aspernatur aliquam facere asperiores ducimus exercitationem. Cupiditate\n        tempore natus quo neque, aspernatur dignissimos nemo in vero omnis\n        fugiat repellendus non. Tempore, eveniet iste ab beatae recusandae dolor\n        ducimus! Eveniet ex dolore voluptatibus possimus numquam, suscipit\n        assumenda! Earum, error nulla? Minus autem doloremque sunt explicabo\n        quam. Repellendus veritatis molestias iusto magni nesciunt atque animi\n        repudiandae ex sapiente. Adipisci praesentium error dolorem placeat\n        architecto deserunt! Reprehenderit error atque facilis sequi fugit eius\n        maxime quisquam doloremque, sint dignissimos itaque eaque explicabo\n        possimus nisi corporis aut ullam perferendis temporibus velit, enim\n        cumque incidunt dicta nostrum. At incidunt nihil exercitationem sed sint\n        iste debitis architecto ducimus vitae. Culpa non blanditiis officia sint\n        provident facilis vitae nisi perspiciatis perferendis? In veniam\n        expedita, blanditiis amet laudantium, nisi eveniet dolor voluptates et\n        reiciendis, necessitatibus assumenda impedit accusamus iusto dolores?\n        Natus iste, necessitatibus molestiae quas quo sint debitis facilis\n        dolorum inventore iusto similique adipisci ea voluptatum recusandae,\n        assumenda aperiam nostrum est? Fugiat ipsa ad porro quod consequuntur\n        nobis a repellendus dolorem dolorum recusandae molestiae earum\n        exercitationem necessitatibus quidem voluptate magni expedita odit, sed\n        vero dicta. Nesciunt, laudantium et eos unde obcaecati inventore rerum\n        quaerat ullam corporis eaque minima id temporibus quidem, dolor\n        reiciendis. Ducimus recusandae aliquam, assumenda illum natus eaque\n        dolor voluptatem quas placeat. Earum, neque eum quasi, adipisci ea qui\n        deleniti magni distinctio, dicta voluptate odio aut corrupti commodi\n        possimus autem. Velit sapiente, beatae recusandae provident esse eveniet\n        sed eos, iste ipsam atque optio id consequuntur quos ullam tempore\n        aliquam ratione obcaecati quidem praesentium debitis, fugit et. Possimus\n        laudantium provident ab praesentium illum doloremque est cumque eius\n        temporibus sint vero nemo reprehenderit tenetur deserunt dolor,\n        exercitationem in! Ut impedit deserunt illum distinctio illo tenetur\n        laborum, deleniti fugit voluptas maiores, soluta architecto nulla optio\n        cumque, magnam eveniet temporibus! Quaerat rerum aliquid repellendus\n        labore natus facilis? Ad non impedit ullam beatae molestiae officia,\n        iste dicta iure dolorem vero placeat culpa. Tempora adipisci cumque,\n        nisi voluptas eligendi reiciendis et praesentium totam dolore soluta\n        corporis, quos ad deleniti iste ullam aut unde harum minus laboriosam at\n        eaque aliquid aperiam? Porro distinctio labore aperiam adipisci earum\n        dolorem quisquam est facere soluta, vitae commodi voluptate ipsum\n        corrupti, natus sunt maxime necessitatibus tempora tenetur! Esse\n        consequuntur, laudantium nihil asperiores ut modi facilis omnis odio\n        illo accusantium, ab excepturi non. Ea ipsum porro corporis velit sint\n        itaque fugiat enim, tempore consequatur sit similique deleniti quas\n        saepe numquam fuga incidunt eaque maxime dignissimos nisi voluptates\n        quod tempora. Hic iure quidem ipsa a dicta recusandae id, dignissimos\n        excepturi eum. Enim dolore inventore quo repellendus aut, distinctio\n        doloremque eum dignissimos suscipit, a ratione minus vitae dolorem?\n        Inventore dolorum est recusandae vel natus. Dolor suscipit excepturi,\n        optio cum consectetur voluptatem cumque aliquam cupiditate. Dolorem eum\n        error eveniet, esse atque quas odit reprehenderit necessitatibus, enim\n        ex optio est, praesentium numquam laudantium minus perspiciatis natus.\n        Quam esse perferendis id? Illum error aut qui alias, rerum voluptatem,\n        suscipit ipsam cupiditate in debitis totam veritatis necessitatibus\n        sapiente accusantium? Doloribus tempore quam, culpa aut, quas accusamus\n        ut labore blanditiis cum temporibus possimus hic maiores nostrum nulla,\n        eum fugiat magni nemo ratione ullam doloremque. Minima quos numquam\n        placeat. Deleniti architecto fugit, expedita sit animi esse nihil\n        accusamus dolorum itaque perferendis culpa ullam numquam iure harum\n        voluptatum non quisquam impedit ipsam sapiente officia quidem aliquam\n        quasi voluptate? Quasi non, dolor ratione nulla rem dolores numquam\n        quidem assumenda tempora ipsam voluptatum dolorum molestias tenetur\n        minima id perspiciatis maiores iste nemo ducimus earum provident\n        praesentium cupiditate libero vitae? Quos, quas. Praesentium quaerat\n        officia hic, adipisci eveniet perferendis explicabo odio totam unde aut\n        maxime tempora earum possimus! Eaque, vitae quis! Praesentium, assumenda\n        mollitia.\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"container\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img<\/span>\n          <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/chris101\/image\/upload\/v1647634707\/delta.jpg\"<\/span>\n          <span class=\"hljs-attr\">alt<\/span>=<span class=\"hljs-string\">\"\"<\/span>\n          <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"img-fluid\"<\/span>\n          <span class=\"hljs-attr\">loading<\/span>=<span class=\"hljs-string\">\"lazy\"<\/span>\n        \/&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">main<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">html<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><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<p>Click the link below to access the live version of the code:<\/p>\n<p><a href=\"https:\/\/o53mq0.csb.app\/\">https:\/\/o53mq0.csb.app\/<\/a><\/p>\n<p>We will load the URL on our browser and open up developer inspection tools: (<code>shift<\/code>+<code>ctrl<\/code>+<code>I<\/code> on Google Chrome). In the developer tools, go to the <code>Network<\/code> tab and select <code>Img<\/code> under it.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/chris101\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/v1652607578\/hackmamba\/Screenshot_from_2022-05-15_12-38-07_qlrgnh.png\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"635\" height=\"390\"\/><\/p>\n<p>Once we are there, we hard refresh the page and notice that only the top image is loaded first:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/chris101\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/v1652614031\/hackmamba\/Screenshot_from_2022-05-15_12-56-21_zy2hdn.png\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1366\" height=\"768\"\/><\/p>\n<p>Once we start scrolling down, the second image begins loading:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/chris101\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/v1652608660\/hackmamba\/Screenshot_from_2022-05-15_12-56-29_akr9yi.png\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1366\" height=\"768\"\/><\/p>\n<p>A short video demonstrating the test done:<\/p>\n<p><a href=\"https:\/\/youtu.be\/S3rCexKbfvY\">https:\/\/youtu.be\/S3rCexKbfvY<\/a><\/p>\n<h2>Conclusion<\/h2>\n<p>This article covers implementing lazy loading images in plain HTML and testing how it works in practice.<\/p>\n<h2>Resources<\/h2>\n<ol>\n<li>\n<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/Performance\/Lazy_loading\">Lazy Loading<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTML\/Element\/img#attr-loading\">Image Attributes<\/a>\n<\/li>\n<\/ol>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":28043,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[134,145,370,371],"class_list":["post-28042","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-guest-post","tag-html5","tag-image","tag-under-review"],"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>How to Lazy Load Images in Plain HTML<\/title>\n<meta name=\"description\" content=\"Image lazy loading is a method of identifying resources (images) as non-critical until they\u2019re needed. For example, a page wouldn\u2019t load an image if it is not in the user\u2019s viewport. The image will get loaded only when a user scrolls to it. Lazy loading does not reduce the image quality but improves the page load time by rendering resources only when needed.\" \/>\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\/guest_post\/how-to-lazyload-images-in-plain-html\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Lazy Load Images in Plain HTML\" \/>\n<meta property=\"og:description\" content=\"Image lazy loading is a method of identifying resources (images) as non-critical until they\u2019re needed. For example, a page wouldn\u2019t load an image if it is not in the user\u2019s viewport. The image will get loaded only when a user scrolls to it. Lazy loading does not reduce the image quality but improves the page load time by rendering resources only when needed.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-10T07:39:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-26T20:52:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681925583\/Web_Assets\/blog\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29.jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"360\" \/>\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\/guest_post\/how-to-lazyload-images-in-plain-html\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"How to Lazy Load Images in Plain HTML\",\"datePublished\":\"2022-06-10T07:39:38+00:00\",\"dateModified\":\"2025-09-26T20:52:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/\"},\"wordCount\":8,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681925583\/Web_Assets\/blog\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29.jpg?_i=AA\",\"keywords\":[\"Guest Post\",\"HTML5\",\"Image\",\"Under Review\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2022\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/\",\"url\":\"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/\",\"name\":\"How to Lazy Load Images in Plain HTML\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681925583\/Web_Assets\/blog\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29.jpg?_i=AA\",\"datePublished\":\"2022-06-10T07:39:38+00:00\",\"dateModified\":\"2025-09-26T20:52:03+00:00\",\"description\":\"Image lazy loading is a method of identifying resources (images) as non-critical until they\u2019re needed. For example, a page wouldn\u2019t load an image if it is not in the user\u2019s viewport. The image will get loaded only when a user scrolls to it. Lazy loading does not reduce the image quality but improves the page load time by rendering resources only when needed.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681925583\/Web_Assets\/blog\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681925583\/Web_Assets\/blog\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29.jpg?_i=AA\",\"width\":640,\"height\":360},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Lazy Load Images in Plain HTML\"}]},{\"@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":"How to Lazy Load Images in Plain HTML","description":"Image lazy loading is a method of identifying resources (images) as non-critical until they\u2019re needed. For example, a page wouldn\u2019t load an image if it is not in the user\u2019s viewport. The image will get loaded only when a user scrolls to it. Lazy loading does not reduce the image quality but improves the page load time by rendering resources only when needed.","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\/guest_post\/how-to-lazyload-images-in-plain-html\/","og_locale":"en_US","og_type":"article","og_title":"How to Lazy Load Images in Plain HTML","og_description":"Image lazy loading is a method of identifying resources (images) as non-critical until they\u2019re needed. For example, a page wouldn\u2019t load an image if it is not in the user\u2019s viewport. The image will get loaded only when a user scrolls to it. Lazy loading does not reduce the image quality but improves the page load time by rendering resources only when needed.","og_url":"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/","og_site_name":"Cloudinary Blog","article_published_time":"2022-06-10T07:39:38+00:00","article_modified_time":"2025-09-26T20:52:03+00:00","og_image":[{"width":640,"height":360,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681925583\/Web_Assets\/blog\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29.jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/"},"author":{"name":"","@id":""},"headline":"How to Lazy Load Images in Plain HTML","datePublished":"2022-06-10T07:39:38+00:00","dateModified":"2025-09-26T20:52:03+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/"},"wordCount":8,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681925583\/Web_Assets\/blog\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29.jpg?_i=AA","keywords":["Guest Post","HTML5","Image","Under Review"],"inLanguage":"en-US","copyrightYear":"2022","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/","url":"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/","name":"How to Lazy Load Images in Plain HTML","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681925583\/Web_Assets\/blog\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29.jpg?_i=AA","datePublished":"2022-06-10T07:39:38+00:00","dateModified":"2025-09-26T20:52:03+00:00","description":"Image lazy loading is a method of identifying resources (images) as non-critical until they\u2019re needed. For example, a page wouldn\u2019t load an image if it is not in the user\u2019s viewport. The image will get loaded only when a user scrolls to it. Lazy loading does not reduce the image quality but improves the page load time by rendering resources only when needed.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681925583\/Web_Assets\/blog\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681925583\/Web_Assets\/blog\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29.jpg?_i=AA","width":640,"height":360},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/how-to-lazyload-images-in-plain-html\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Lazy Load Images in Plain HTML"}]},{"@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\/v1681925583\/Web_Assets\/blog\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29\/3bc0350b89dde445438164c6977184fdba1194c2-640x360-1_280432af29.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/28042","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=28042"}],"version-history":[{"count":1,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/28042\/revisions"}],"predecessor-version":[{"id":38617,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/28042\/revisions\/38617"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/28043"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=28042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=28042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=28042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}