MODRACXKENNETH D'SILVA

← Archive & Insights

Reducing Render‑Blocking Resources for Magento & Shopify

Learn how to eliminate render‑blocking CSS and JavaScript in Magento and Shopify stores to improve Core Web Vitals, SEO rankings, and user experience.

By Kenneth D'Silva (MODRACX)

Introduction

Render‑blocking resources delay the first paint of a page, harming Largest Contentful Paint (LCP) and First Contentful Paint (FCP) – both critical SEO signals. This guide shows practical steps to identify, defer, and inline critical assets for Magento 2 and Shopify stores.

1. What Is Render‑Blocking?

A resource is render‑blocking if the browser must download and parse it before it can render any content. Typical culprits: - <link rel="stylesheet" href="..."> - <script src="..." defer="false"></script> - Synchronous font loads.

2. Auditing with Lighthouse

Run npm run lint or use Chrome DevTools → Lighthouse → Performance panel. Look for: - Unused CSS/JS warnings. - Eliminate render‑blocking resources suggestions.

3. Magento 2 Implementation

3.1 Enable CSS/JS Merging & Minification

In the Admin panel go to Stores → Configuration → Advanced → Developer → JavaScript Settings and CSS Settings: - Merge JavaScript FilesYes - Minify JavaScript FilesYes - Merge CSS FilesYes - Minify CSS FilesYes

3.2 Inline Critical CSS

Use the mage/page_cache module to generate a critical CSS file.

bin/magento dev:source-theme:compile
gulp critical-css --src=pub/static/frontend/*/default/css/styles.css --dest=pub/static/frontend/*/default/css/critical.css

Add the inline block in head.phtml:

<style><?php echo file_get_contents($this->getViewFileUrl('css/critical.css')); ?></style>

Then load the remaining CSS asynchronously:

<link rel="preload" href="<?= $this->getViewFileUrl('css/styles.css') ?>" as="style" onload="this.rel='stylesheet'" />
<noscript><link rel="stylesheet" href="<?= $this->getViewFileUrl('css/styles.css') ?>" /></noscript>

3.3 Defer Non‑Critical JS

Wrap heavy scripts with defer or load them via RequireJS after window.load:

require(['jquery'], function($) {
  $(window).on('load', function() {
    $.getScript('https://example.com/js/heavy.js');
  });
});

4. Shopify Implementation

4.1 Theme.liquid Adjustments

Replace normal stylesheet tags with preload + async pattern:

<link rel="preload" href="{{ 'theme.css' | asset_url }}" as="style" onload="this.rel='stylesheet'" />
<noscript><link rel="stylesheet" href="{{ 'theme.css' | asset_url }}" /></noscript>

4.2 Inline Critical CSS via theme.scss.liquid

Add a critical.css snippet generated by tools like Critical (npm). In theme.liquid:

<style>{% include 'critical.css' %}</style>

4.3 Defer Scripts

Add defer attribute to script tags:

<script src="{{ 'app.js' | asset_url }}" defer></script>

Or load lazily after page load:

document.addEventListener('DOMContentLoaded', function(){
  var s = document.createElement('script');
  s.src = '{{ "lazy.js" | asset_url }}';
  document.body.appendChild(s);
});

5. Performance Validation

Tool Metric Target
WebPageTest First Contentful Paint < 1.5 s
Lighthouse Render‑Blocking Resources 0 warnings
Search Console Core Web Vitals (Good) > 90 % of pages

Run before‑and‑after tests to capture improvements.

6. SEO Checklist

7. Common Pitfalls

Issue Symptom Fix
Missing fallback noscript Users with JS disabled see unstyled pages. Keep a <noscript> stylesheet link.
Over‑inlining large CSS Increases HTML size, hurts TTFB. Keep critical CSS under 14 KB (gzip).
Defer essential scripts (e.g., checkout) Checkout functionality breaks. Only defer scripts that are not required for initial render.

Conclusion & Call‑to‑Action

Eliminating render‑blocking resources dramatically improves page speed, Core Web Vitals, and SEO rankings for both Magento and Shopify stores. Ready to speed up your storefront? Click the “Start a project” button in the MODRACX portfolio, and let’s implement a faster, search‑engine‑friendly front‑end together.


Kenneth D’Silva – Magento & Shopify specialist, MODRACX