{"id":374564,"date":"2026-10-02T08:36:49","date_gmt":"2026-10-02T08:36:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/rocket-lqip\/"},"modified":"2026-10-02T08:36:16","modified_gmt":"2026-10-02T08:36:16","slug":"lazyblur-for-wp-rocket","status":"publish","type":"plugin","link":"https:\/\/mk.wordpress.org\/plugins\/lazyblur-for-wp-rocket\/","author":687745,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.2","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"LazyBlur Placeholder Addon for WP Rocket","header_author":"Ali Hussain","header_description":"Replaces empty WP-Rocket lazy-load placeholders with lightweight previews generated from the WordPress media library.","assets_banners_color":"adac99","last_updated":"2026-10-02 08:36:16","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/alihs123\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":68,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"alihs123","date":"2026-10-02 08:36:16","revision":3724378}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3724378,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3724378,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3724391,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3724391,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3724391,"resolution":"1","location":"assets","locale":"","width":1024,"height":768},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3724391,"resolution":"2","location":"assets","locale":"","width":1024,"height":768},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3724391,"resolution":"3","location":"assets","locale":"","width":1024,"height":768},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3724391,"resolution":"4","location":"assets","locale":"","width":1024,"height":768}},"screenshots":{"1":"Image placeholder settings, including width, quality, and first-image controls.","2":"Media Library coverage statistics and the backfill tool.","3":"Side-by-side placeholder and full-image preview.","4":"WP-Rocket integration requirements and YouTube preview settings."}},"plugin_section":[],"plugin_tags":[163,1464,283975,247,54246],"plugin_category":[50,54],"plugin_contributors":[283976],"plugin_business_model":[],"class_list":["post-374564","plugin","type-plugin","status-publish","hentry","plugin_tags-images","plugin_tags-lazy-loading","plugin_tags-lqip","plugin_tags-performance","plugin_tags-wp-rocket","plugin_category-media","plugin_category-security-and-spam-protection","plugin_contributors-alihs123","plugin_committers-alihs123"],"banners":{"banner":"https:\/\/ps.w.org\/lazyblur-for-wp-rocket\/assets\/banner-772x250.png?rev=3724391","banner_2x":"https:\/\/ps.w.org\/lazyblur-for-wp-rocket\/assets\/banner-1544x500.png?rev=3724391","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/lazyblur-for-wp-rocket\/assets\/icon-128x128.png?rev=3724378","icon_2x":"https:\/\/ps.w.org\/lazyblur-for-wp-rocket\/assets\/icon-256x256.png?rev=3724378","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/lazyblur-for-wp-rocket\/assets\/screenshot-1.png?rev=3724391","caption":"Image placeholder settings, including width, quality, and first-image controls."},{"src":"https:\/\/ps.w.org\/lazyblur-for-wp-rocket\/assets\/screenshot-2.png?rev=3724391","caption":"Media Library coverage statistics and the backfill tool."},{"src":"https:\/\/ps.w.org\/lazyblur-for-wp-rocket\/assets\/screenshot-3.png?rev=3724391","caption":"Side-by-side placeholder and full-image preview."},{"src":"https:\/\/ps.w.org\/lazyblur-for-wp-rocket\/assets\/screenshot-4.png?rev=3724391","caption":"WP-Rocket integration requirements and YouTube preview settings."}],"raw_content":"<!--section=description-->\n<p>You satisfied Google's performance guidance by lazy-loading offscreen images, but visitors may still see empty image areas while those files load. LazyBlur Placeholder Addon for WP Rocket fills those spaces with a tiny preview of the final image.<\/p>\n\n<p>The plugin uses the Low Quality Image Placeholder (LQIP) technique. It generates a small image when media is uploaded, stores it as a base64 data URI, and displays it through WP-Rocket's LazyLoad markup until the full image is ready. The preview then sharpens into the final image with a one-second transition.<\/p>\n\n<p>This improves perceived loading and gives visitors visual context immediately. It complements image lazy loading and Core Web Vitals work; it does not guarantee search rankings or performance scores.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Generates LQIP data automatically for new Media Library images.<\/li>\n<li>Backfills placeholders for images uploaded before activation.<\/li>\n<li>Works with WP-Rocket JavaScript and native image lazy loading.<\/li>\n<li>Supports JPEG, PNG, GIF, and WebP attachments.<\/li>\n<li>Resolves responsive sizes, scaled originals, and CDN-hosted uploads.<\/li>\n<li>Optionally adds a placeholder to the first above-the-fold image.<\/li>\n<li>Preserves responsive <code>srcset<\/code> data and provides no-JavaScript fallbacks.<\/li>\n<li>Applies an accessible reduced-motion-safe fade from preview to full image.<\/li>\n<li>Caches local LQIP previews for WP-Rocket YouTube placeholders.<\/li>\n<li>Provides coverage statistics, integration checks, and a live preview.<\/li>\n<li>Includes filters for custom attachment resolution and final image markup.<\/li>\n<\/ul>\n\n<h4>SEO and user experience<\/h4>\n\n<p>Lazy loading helps reduce initial page weight, but an empty placeholder can make a page feel unfinished. LQIP keeps the layout visually populated while deferred images load, helping users understand the page sooner.<\/p>\n\n<p>The plugin preserves image dimensions and responsive sources. The optional first-image setting is disabled by default because replacing an above-the-fold image can affect Largest Contentful Paint. Test that option against your own Core Web Vitals data before enabling it in production.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.6 or later.<\/li>\n<li>PHP 7.4 or later.<\/li>\n<li>WP-Rocket with LazyLoad for images enabled to display image placeholders.<\/li>\n<li>WP-Rocket LazyLoad for iframes and videos, plus YouTube preview replacement, for YouTube LQIP support.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>The optional YouTube preview feature requests thumbnail images from <code>i.ytimg.com<\/code> using the video ID already present in the page content. The thumbnail is downloaded when a post is saved or through a scheduled background task, then stored locally in the WordPress Media Library.<\/p>\n\n<p>This service is provided by YouTube\/Google and is subject to the <a href=\"https:\/\/www.youtube.com\/t\/terms\">YouTube Terms of Service<\/a> and <a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy Policy<\/a>. No request is made when YouTube preview support is disabled or no YouTube video is present.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>lazyblur-for-wp-rocket<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the plugin ZIP through <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong>.<\/li>\n<li>Activate <strong>LazyBlur Placeholder Addon for WP Rocket<\/strong>.<\/li>\n<li>In WP-Rocket, enable <strong>LazyLoad for images<\/strong> under <strong>Settings &gt; WP-Rocket &gt; Media<\/strong>.<\/li>\n<li>Open <strong>Settings &gt; LazyBlur<\/strong>.<\/li>\n<li>Configure placeholder width and compression quality.<\/li>\n<li>Run the backfill tool if the Media Library contains images uploaded before activation.<\/li>\n<li>Clear the WP-Rocket cache and test the front end while logged out.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20replace%20wp-rocket%3F\"><h3>Does this replace WP-Rocket?<\/h3><\/dt>\n<dd><p>No. This plugin extends WP-Rocket's LazyLoad output. WP-Rocket remains responsible for deciding which images are lazy-loaded and when the full files are loaded.<\/p><\/dd>\n<dt id=\"what%20problem%20does%20lqip%20solve%3F\"><h3>What problem does LQIP solve?<\/h3><\/dt>\n<dd><p>Standard lazy loading can leave an empty or generic placeholder before an image enters the viewport. LQIP displays a recognizable, lightweight preview during that interval.<\/p><\/dd>\n<dt id=\"are%20placeholders%20generated%20for%20existing%20images%3F\"><h3>Are placeholders generated for existing images?<\/h3><\/dt>\n<dd><p>Use the backfill tool under <strong>Settings &gt; LazyBlur<\/strong>. It processes the Media Library in small batches to reduce timeout risk.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20cdn%20or%20resized%20image%20urls%3F\"><h3>Does it work with CDN or resized image URLs?<\/h3><\/dt>\n<dd><p>Yes. The plugin resolves WordPress intermediate sizes, <code>-scaled<\/code> originals, and upload paths served from a different CDN hostname.<\/p><\/dd>\n<dt id=\"can%20it%20add%20a%20placeholder%20to%20the%20first%20image%3F\"><h3>Can it add a placeholder to the first image?<\/h3><\/dt>\n<dd><p>Yes. Enable <strong>Include the first image<\/strong> in the settings. This option can affect Largest Contentful Paint, so measure the result before using it on a production site.<\/p><\/dd>\n<dt id=\"does%20it%20support%20native%20lazy%20loading%3F\"><h3>Does it support native lazy loading?<\/h3><\/dt>\n<dd><p>Yes. The real <code>src<\/code> and <code>srcset<\/code> are restored near the viewport using a small IntersectionObserver script. A no-JavaScript fallback retains access to the original image.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20javascript%20is%20disabled%3F\"><h3>What happens when JavaScript is disabled?<\/h3><\/dt>\n<dd><p>Images converted by the native or first-image modes include their original markup in a <code>noscript<\/code> fallback.<\/p><\/dd>\n<dt id=\"can%20developers%20customize%20the%20output%3F\"><h3>Can developers customize the output?<\/h3><\/dt>\n<dd><p>Use <code>wrlqip_final_image_html<\/code> to filter completed image markup. Use <code>wrlqip_pre_attachment_id_from_url<\/code> to provide an attachment ID for custom CDN or offload URLs.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Added image LQIP generation, backfill, native lazy-load support, optional first-image handling, fade transitions, and YouTube previews.<\/li>\n<\/ul>","raw_excerpt":"Replaces empty WP-Rocket lazy-load placeholders with lightweight, blurred previews generated from your WordPress media library.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/374564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=374564"}],"author":[{"embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/alihs123"}],"wp:attachment":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=374564"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=374564"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=374564"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=374564"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=374564"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=374564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}