diff --git a/app/Entities/Repos/PageRepo.php b/app/Entities/Repos/PageRepo.php
index 1aeee8dae..208aa5fa3 100644
--- a/app/Entities/Repos/PageRepo.php
+++ b/app/Entities/Repos/PageRepo.php
@@ -422,25 +422,29 @@ class PageRepo extends EntityRepo
             return [];
         }
 
-        $tree = collect([]);
-        foreach ($headers as $header) {
-            $text = $header->nodeValue;
-            $tree->push([
+        $tree = collect($headers)->map(function($header) {
+            $text = trim(str_replace("\xc2\xa0", '', $header->nodeValue));
+            if (strlen($text) > 30) {
+                $text = substr($text, 0, 27) . '...';
+            }
+
+            return [
                 'nodeName' => strtolower($header->nodeName),
                 'level' => intval(str_replace('h', '', $header->nodeName)),
                 'link' => '#' . $header->getAttribute('id'),
-                'text' => strlen($text) > 30 ? substr($text, 0, 27) . '...' : $text
-            ]);
-        }
+                'text' => $text,
+            ];
+        })->filter(function($header) {
+            return strlen($header['text']) > 0;
+        });
 
         // Normalise headers if only smaller headers have been used
-        if (count($tree) > 0) {
-            $minLevel = $tree->pluck('level')->min();
-            $tree = $tree->map(function ($header) use ($minLevel) {
-                $header['level'] -= ($minLevel - 2);
-                return $header;
-            });
-        }
+        $minLevel = $tree->pluck('level')->min();
+        $tree = $tree->map(function ($header) use ($minLevel) {
+            $header['level'] -= ($minLevel - 2);
+            return $header;
+        });
+
         return $tree->toArray();
     }
 
diff --git a/tests/HelpersTest.php b/tests/Unit/HelpersTest.php
similarity index 100%
rename from tests/HelpersTest.php
rename to tests/Unit/HelpersTest.php
diff --git a/tests/Unit/PageRepoTest.php b/tests/Unit/PageRepoTest.php
new file mode 100644
index 000000000..36addcbe4
--- /dev/null
+++ b/tests/Unit/PageRepoTest.php
@@ -0,0 +1,32 @@
+<?php
+namespace Tests;
+
+use BookStack\Entities\Repos\PageRepo;
+
+class PageRepoTest extends TestCase
+{
+    /**
+     * @var PageRepo $pageRepo
+     */
+    protected $pageRepo;
+
+    protected function setUp()
+    {
+        parent::setUp();
+        $this->pageRepo = app()->make(PageRepo::class);
+    }
+
+    public function test_get_page_nav_does_not_show_empty_titles()
+    {
+        $content = '<h1 id="testa">Hello</h1><h2 id="testb">&nbsp;</h2><h3 id="testc"></h3>';
+        $navMap = $this->pageRepo->getPageNav($content);
+
+        $this->assertCount(1, $navMap);
+        $this->assertArraySubset([
+            'nodeName' => 'h1',
+            'link' => '#testa',
+            'text' => 'Hello'
+        ], $navMap[0]);
+    }
+
+}
\ No newline at end of file