diff --git a/src/Plugin/Layout/TabsLayout.php b/src/Plugin/Layout/TabsLayout.php
index 8a424da..61356ef 100644
--- a/src/Plugin/Layout/TabsLayout.php
+++ b/src/Plugin/Layout/TabsLayout.php
@@ -15,6 +15,12 @@ class TabsLayout extends LayoutDefault implements PluginFormInterface {
    */
   public function build(array $regions) {
     $build = parent::build($regions);
+    // Declare 'tabs' as empty array if it is not setted.
+    // See https://dgo.to/3305095
+    if (!isset($build['tabs'])) {
+      $build['tabs'] = [];
+    }
+
     // If using Olivero, manually attach its tabs library.
     $theme_name = \Drupal::service('theme.manager')->getActiveTheme()->getName();
     if ($theme_name == 'olivero') {

diff --git a/templates/tabs.html.twig b/templates/tabs.html.twig
index 8b727dc..cf80ff7 100644
--- a/templates/tabs.html.twig
+++ b/templates/tabs.html.twig
@@ -15,7 +15,7 @@

 <!-- Nav tabs -->
 <ul class="tabs tab--primary layout-tabs">
-{% for block_id, block_data in blocks|filter(content[region][block_id]) %}
+{% for block_id, block_data in blocks|filter(v => v.content is not empty) %}
 {% set block_label = content[region][block_id]['content']['#title']['#markup'] %}
 {% if block_label is empty %}
   {% set block_label = content[region][block_id]['#configuration']['label'] %}
@@ -29,7 +29,7 @@

 <!-- Tab panes -->
 <div class="tab-content">
-  {% for block_id, block_data in blocks|filter(content[region][block_id]) %}
+  {% for block_id, block_data in blocks|filter(v => v.content is not empty) %}
   <div class="tab-pane {{ loop.first ? 'active' }}" id="panel-{{ block_id }}">
     {{ content[region][block_id] }}
   </div>
@@ -38,7 +38,7 @@
 {% else %}
 {# Markup for layout builder #}
 <!-- Tab panes -->
-{% for block_id, block_data in blocks|filter(content[region][block_id]) %}
+{% for block_id, block_data in blocks %}
   {% if block_id starts with '#' %}
     {# Don't try to output attributes #}
   {% else %}
