We’ve been working on several Magento 2 sites recently which had an issue with the full page cache not doing its job correctly. Despite being enabled, the full page cache files in /var/page_cache/ contained header information only.

The cause?...

The cause? It is usually down to the use of this tag in a layout xml document;


cacheable=false 


If any element on the page has this tag set, then the whole page will fail to generate full page cache.

Is it a bug? Is it a feature?

Is it a bug? Is it a feature? At this stage we will put it down to a bug as Magento’s documentation states this is a safe way to isolate a specific element from being cached. Hopefully it will be resolved in future releases, but that doesn’t help us for now, so here's the fix;

Remove cacheable=false from the offending XML layout document. Now go and find the block constructor class for the block you are trying to make non-cacheable.

In the __construct function add;


$this->_isScopePrivate = true;


Right before;


parent::__construct($context, $data);


Full page cache will now work, while your block remains dynamic.