Boost Your Store Performance with Magento 2 ESI Blocks

Boost Your Store Performance with Magento 2 ESI Blocks

Are you losing customers because your store takes too long to load?

Studies show that a one-second delay in page load time can result in a 7% reduction in conversions.

Magento 2 ESI blocks improve your site's performance without sacrificing the dynamic elements.

The article explores the implementation and monitoring tools and techniques of ESI blocks.

PERFORMANCE OPTIMIZATION

Boost Your Store with
Magento 2 ESI Blocks

Deliver dynamic, personalized content without sacrificing page speed or cache efficiency

Without ESI Blocks

0s
Page Load Time
Full page regeneration
-7% conversion per second

With ESI Blocks

0ms
Page Load Time
Cached static content
Dynamic personalization

See ESI Blocks in Action

CACHED
Static Content (Cached)
Dynamic ESI Block
Welcome back, User! Cart: 0 items

Key Takeaways

  • Magento 2 ESI blocks enable the dynamic delivery of content.

  • Use ESI blocks using layout XML and session-aware logic.

  • Advanced ESI techniques include hole punching and micro-caching.

  • Track ESI block performance using tools like Varnish logs and New Relic.

  • Several brands use ESI for speed and personalization.

What Are Magento 2 ESI Blocks?

Magento 2 ESI blocks help serve dynamic content within full-page cached pages.

The technique is essential when using Varnish as a caching proxy. It enables Magento to render user-specific blocks without compromising page speed. These include shopping cart summaries or welcome messages.

ESI blocks instruct Varnish to fetch dynamic fragments from the main cached page. It uses the <esi:include> tag. The approach enhances performance and ensures scalability during high traffic.

Developers can mark blocks as cacheable="false". Enable ESI in the layout XML by setting esi="1".

ESI blocks are useful for content that changes per customer. These include wishlists or account details. It needs a proper Varnish setup. Excessive ESI usage can impact performance if not managed.

How Magento 2 Implements Magento 2 ESI Blocks?

IMPLEMENTATION GUIDE

ESI Block Implementation Process

Follow these steps to implement ESI blocks in your Magento 2 store

Implementation Progress
0% Complete
1
Configure Varnish Cache
Set up Varnish with Magento-generated VCL
Admin Configuration Path:
Stores > Configuration > Advanced > System > Full Page Cache
Set "Caching Application" to Varnish Cache
Export VCL file for your Varnish version
Apply VCL configuration to Varnish server
2
Enable ESI in Layout XML
Mark blocks as non-cacheable with ESI support


My Account

Important
Always use both cacheable="false" and esi="1" attributes together for ESI blocks
3
Create Custom ESI Controller
Build controllers for complex dynamic content
Controller Benefits:
  • Total control over caching behavior
  • Easier debugging of ESI requests
  • Block reuse across multiple pages
  • Custom cache invalidation logic
Example Route:
/esi/customer/wishlist/count
4
Test & Monitor Performance
Verify ESI blocks work correctly
Varnish Logs
Check ESI requests
New Relic
Monitor performance
Debug Mode
Verify block output

Quick Reference Guide

Common ESI Blocks
Shopping Cart Summary
Customer Welcome Message
Wishlist Counter
Recently Viewed Products
Best Practices
Minimize ESI block count
Use micro-caching when possible
Implement fallback logic
Monitor performance impact

1. ESI-enabled Layout XML

  • Magento developers can mark specific blocks as non-cacheable. It also enables ESI by modifying the theme's layout XML files.

  • It tells Magento and Varnish not to store the block in the full-page cache. They must render it for each user.

    1. cacheable="false" indicates that the block contains dynamic content.

    2. esi="1" tells Magento to output the block using an <esi:include> tag to handle Varnish.

2. Full Page Cache Integration

Full Page Cache Integration

Magento 2 supports Varnish as a reverse proxy for full-page caching. To use ESI blocks:

  • Configure Varnish with the Magento-generated VCL file.

  • The VCL contains logic to detect ESI tags. It also fetches those blocks using backend requests to Magento.

  • Magento injects <esi:include> tags into the HTML. It is during page generation for any ESI-enabled blocks.

The tag instructs Varnish to fetch the block at /esi/customer/account/link/. It is during page delivery.

3. Private Content and Session Handling

Magento classifies ESI-enabled blocks as private content. It means:

  • The content varies per user.

  • Magento serves this content on a per-session basis.

  • Magento uses a mechanism called the Private Content JS module. It helps handle certain dynamic updates. ESI bypasses JavaScript by injecting the content server-side.

It makes ESI more efficient than relying on frontend JavaScript. It helps inject personalized content after the page loads.

4. Varnish ESI Support and Configuration

Magento provides default Varnish configurations that support ESI:

  • Admin Panel > Stores > Configuration > Advanced > System > Full Page Cache.

  • Set “Caching Application” to Varnish Cache.

  • Export the VCL file and apply it to your Varnish server.

The VCL includes ESI parsing rules and session cookie handling.

5. Rendering and Performance Behavior

When a customer visits your store:

1. Varnish serves the full cached HTML page from memory.

2. Any <esi:include> tags in the HTML trigger extra requests to Magento for the dynamic block content.

3. They fetch these dynamic pieces and insert them into the page before you return them to the user.

It allows:

  • Static parts, such as headers and banners, should remain cached.

  • Dynamic parts, such as cart totals and login status, should remain user-specific.

7 Advanced Implementation Techniques

1. Custom ESI Controllers for Isolated Block Rendering

  • Instead of relying on layout XML, you can create custom ESI controllers. It helps render specific blocks or content in isolation.

  • It gives you total control over caching behavior and output formatting. The benefits include:

    1. More control over what data you render

    2. Easier debugging of ESI requests

    3. Enables block reuse across various pages

2. ESI with Hole Punching for Composite Blocks

Sometimes, a block contains both cacheable and non-cacheable sections. To optimize rendering:

  • Split the composite block into sub-blocks.

  • Use partial ESI or hole punching where only the dynamic part is ESI-rendered.

  • Maintain the outer layout structure in the cache while updating the inner content.

3. Micro-Caching for High-Frequency Blocks

For ESI blocks that are not user-specific, consider micro-caching them for short intervals. Use:

  • Set short TTL headers on ESI responses.

  • Let Varnish cache ESI responses for brief periods.

The benefits include:

  • Reduces Magento origin load.

  • Supports semi-dynamic content, such as flash deals or counters.

4. Dynamic URL Signing for Secure ESI Requests

To prevent abuse or unwanted scraping of ESI URLs:

  • Add HMAC-based tokens or timestamped signatures to ESI URLs.

  • Confirm tokens in custom controllers before rendering content.

The technique helps ensure bots or unauthenticated clients cannot fetch ESI blocks.

5. Header and Cookie Management for Session-Aware Blocks

Magento’s ESI block logic often depends on session cookies or custom headers. For precise behavior:

  • Use X-Magento-Vary and X-Magento-Tags headers to differentiate cache variants.

  • Strip sensitive cookies in Varnish except those required for session identification. These include PHPSESSID and private_content_version.

Advanced VCL snippets can help fine-tune this and avoid cache fragmentation.

6. Modular Fallbacks for Missing ESI Content

In high-load situations or if ESI requests fail:

  • Build fallback logic into the ESI controller. It helps render a placeholder or cached default.

  • Use Varnish's error 503 handling to retry or redirect to a simplified block output.

It keeps the user experience intact even if dynamic rendering fails.

7. Asynchronous Rendering with JavaScript Fallback

If your infrastructure or CDN doesn’t support ESI, mimic ESI behavior using:

  • JavaScript-based lazy loading for dynamic blocks.

  • Render ESI blocks via AJAX using Magento_Customer/js/customer-data.

The hybrid approach maintains a fast perceived load while preserving personalization.

How It Works

ESI Block Architecture & Request Flow

Understanding how Varnish and Magento work together to deliver dynamic content efficiently

User Browser
Requests Page
Varnish Cache
Serves Cached HTML
ESI Parser
Detects
Magento Backend
Generates Dynamic Content
Cart
User Info
Wishlist

Request Flow Process

1
Page Request
User requests a page from your Magento store
2
Cache Check
Varnish serves cached HTML with ESI tags
3
ESI Processing
Parser detects tags
4
Dynamic Fetch
Magento generates user-specific content
Example ESI Tag Output

6 Common Challenges and Solutions of Magento 2 ESI Blocks

1. ESI Not Rendering as Expected

The ESI block appears blank, or they render it as raw <esi:include> in the HTML output. This is especially true when Varnish is not used.

Solution:

  • Ensure Magento is using Varnish as the full-page cache.

  • Deploy the correct VCL configuration provided by Magento.

  • Verify that the <esi:include> tag is being handled by Varnish, not passed to the browser.

2. Too Many ESI Requests Causing Server Load

Overuse of ESI blocks results in various backend requests per page. It helps strain server resources.

Solution:

  • Merge various ESI fragments into fewer composite blocks.

  • Use micro-caching for semi-dynamic ESI blocks.

  • Audit which blocks need ESI and mark others as cacheable.

3. ESI Block Content Not Updating per User

Dynamic content appears incorrect or cached across users. These include welcome messages or cart totals.

Solution:

  • Use private_content_version or PHPSESSID to vary responses in VCL.

  • Ensure that customer session cookies are not stripped in Varnish for ESI URLs.

  • Mark such blocks as non-cacheable (cacheable="false") in layout XML.

4. Security Risks from Unprotected ESI URLs

ESI block URLs are accessible, exposing sensitive customer or pricing data.

Solution:

  • Use HMAC or token-based validation for custom ESI URLs.

  • Restrict access to ESI routes using session checks or IP whitelisting.

  • Never expose customer-specific logic without validation in custom controllers.

5. Incompatibility with CDNs or Non-Varnish Caches

Some CDNs or built-in cache systems do not support native ESI processing.

Solution:

  • Use JavaScript-based private content as a fallback (Magento_Customer/js/customer-data).

  • For unsupported CDNs, consider AJAX block rendering as an alternative to ESI.

  • Offload dynamic blocks to client-side rendering with service workers or JS hydration.

6. ESI Cache Invalidation Not Working

ESI block content remains outdated even after you make changes. These include cart updates and the wishlist.

Solution:

  • Set X-Magento-Tags in your custom ESI responses.

  • Use Magento's cache tag invalidation mechanisms (e.g., Magento\Framework\DataObject\IdentityInterface).

  • Test the ESI endpoint to ensure it sets the appropriate TTL and tags.

6 Monitoring Tools and Techniques for Magento 2 ESI Blocks

1. Varnish Logs

Varnish Logs

Varnish logs offer real-time insight into ESI behavior at the Varnish level. It helps track:

  • FetchError messages, such as when an ESI URL returns a 404.

  • Number of ESI subrequests per page.

  • Backend response status codes for ESI URLs.

It shows ESI block fetches, helping you debug failed subrequests or slow responses.

2. New Relic APM

New Relic APM

New Relic APM offers application performance monitoring of Magento block rendering. It also monitors ESI impact. It helps track:

  • Magento block render times.

  • Controller response times for ESI URLs.

  • Throughput and error rates.

  • Slow transaction traces specific to ESI controllers.

You can create custom dashboards. It helps isolate ESI route performance vs. standard page loads.

3. Magento Debug Profiler

Magento Debug Profiler

Magento debug profiler helps identify which blocks you can mark as non-cacheable. You can also mark them as rendered via ESI. You can:

  • View block-level rendering times and caching status.

  • Confirm to exclude a block from the full-page cache and ESI rendering.

It requires developer mode and correct permissions.

4. Custom ESI Controller Logs

Custom ESI Controller Logs

Custom ESI controller logs help log user context and controller execution flow. You can use it to:

  • Detect anomalies in user-specific content.

  • Confirm to pick up the correct session.

  • Log token validation or fallback behavior.

5. Blackfire.io Performance Profiling

Blackfire.io Performance Profiling

Blackfire.io enables deep code-level analysis of ESI block rendering and performance bottlenecks. You should profile:

  • Custom ESI controller performance.

  • Number of database queries per block.

  • I/O operations or unnecessary object instantiations in blocks.

Blackfire helps pinpoint inefficient block code. It is safe to execute on the server (ESI). It also doesn't perform under load.

6. Custom HTTP Header Inspection

Custom HTTP Header Inspection

Custom HTTP header inspection helps inspect response headers for ESI block behavior. The key headers include:

  • X-Magento-Tags enables cache invalidation.

  • X-Magento-Vary determines the private cache key.

  • Cache-Control should reflect short TTLs or no-cache if needed.

3 Real-World Use Cases of Magento 2 ESI Blocks

1. Bulk Powders

Bulk Powders

  • Bulk powder’s audience shops fast and often, often making bulk purchases. The mini cart must reflect real-time cart status while maintaining FPC for the rest of the site.

  • Bulk uses an ESI block for the mini cart, allowing it to render. Magento delivers a cached product or homepage. Varnish fetches and injects the latest cart contents.

  • It ensures instantaneous cart updates and improved site responsiveness during peak hours.

2. Nestlé Health Science

Nestlé Health Science

  • Nestlé Health Science operates across various countries subject to strict regulations. Users must see different banners and local promotions. It depends on their country and local legal compliance requirements.

  • Magento’s layout XML defines geo-targeted banners as ESI blocks. IP detection triggers the display of localized content.

  • Nestlé maintains regulatory compliance and fast global performance via CDN-level edge processing.

3. Tom Dixon

Tom Dixon

  • Tom Dixon encourages discovery with "Recently Viewed" and "Recently Compared" product sliders.

  • These blocks are unique per session. These are often embedded on cached product or category pages.

  • Use these features as blocks, with Magento delivering them per session via cookies. Full-page caching remains intact, while session-aware content is separate.

  • Tom Dixon achieves dynamic browsing history with zero impact on cacheability. It ensures a luxury-brand level UX.

FAQs

1. How do you configure an ESI block in Magento 2?

Add the ttl attribute to your block in the layout XML file. For public cache, use a positive value. For a private user-specific cache, use a negative value.

2. When should you use ESI blocks instead of AJAX in Magento 2?

Use ESI blocks for public or semi-dynamic content. It needs independent cache invalidation, like navigation menus or promotional banners. Use AJAX for personalized or private content that changes often.

3. Why is my ESI block not rendering in Magento 2?

ESI blocks only work when using Varnish or compatible FPC solutions. If you are using Magento's built-in cache, you cannot process ESI tags. Check your cache configuration in Stores > Configuration > Advanced > System > Full Page Cache.

4. Do ESI blocks work with HTTPS in Magento 2?

ESI has limitations with HTTPS because Varnish doesn't support ESI over SSL. Magento 2 rewrites ESI URLs to HTTP, even on HTTPS pages. For secure environments, consider SSL termination at the load balancer level.

5. What is the difference between positive and negative TTL values for ESI blocks?

Positive TTL values create a public cache that's shared among all users. Negative TTL values create a private cache that's specific to individual users. Use negative values for personalized content like shopping carts or customer greetings.

Summary

Magento 2 ESI blocks enable dynamic content delivery within full-page cached environments. The article explores the key points of the blocks, including:

  • Developers enable ESI in layout XML using cacheable="false" and esi="1".

  • Varnish fetches ESI blocks using Magento’s VCL configuration.

  • Advanced strategies include custom controllers, micro-caching, and secure URL tokens.

  • Solve common issues like CDN conflicts via caching headers and fallbacks.

Boost dynamic content delivery without compromising speed with managed Magento hosting.

Ruby Agarwal
Ruby Agarwal
Technical Writer

Ruby is an experienced technical writer sharing well-researched Magento hosting insights. She likes to combine unique technical and marketing knowledge in her content.


Get the fastest Magento Hosting! Get Started