diff --git a/core/modules/book/book.module b/core/modules/book/book.module
index 42fec612ee..a1f9c85ef3 100644
--- a/core/modules/book/book.module
+++ b/core/modules/book/book.module
@@ -167,7 +167,7 @@ function book_form_node_form_alter(&$form, FormStateInterface $form_state, $form
 /**
  * Entity form builder to add the book information to the node.
  *
- * @todo: Remove this in favor of an entity field.
+ * @todo Remove this in favor of an entity field.
  */
 function book_node_builder($entity_type, NodeInterface $entity, &$form, FormStateInterface $form_state) {
   $entity->book = $form_state->getValue('book');
@@ -223,11 +223,29 @@ function book_node_load($nodes) {
   }
 }
 
+/**
+ * Implements hook_entity_extra_field_info().
+ */
+function book_entity_extra_field_info() {
+  $fields = [];
+  $allowed_types = \Drupal::config('book.settings')->get('allowed_types');
+  if ($allowed_types) {
+    foreach ($allowed_types as $node_type) {
+      $fields['node'][$node_type]['display']['book_navigation'] = [
+        'label' => t('Book navigation'),
+        'description' => t('Book navigation links'),
+        'weight' => 100,
+      ];
+    }
+  }
+  return $fields;
+}
+
 /**
  * Implements hook_ENTITY_TYPE_view() for node entities.
  */
 function book_node_view(array &$build, EntityInterface $node, EntityViewDisplayInterface $display, $view_mode) {
-  if ($view_mode == 'full') {
+  if ($display->getComponent('book_navigation')) {
     if (!empty($node->book['bid']) && empty($node->in_preview)) {
       $book_node = Node::load($node->book['bid']);
       if (!$book_node->access()) {
@@ -236,7 +254,6 @@ function book_node_view(array &$build, EntityInterface $node, EntityViewDisplayI
       $build['book_navigation'] = [
         '#theme' => 'book_navigation',
         '#book_link' => $node->book,
-        '#weight' => 100,
         // The book navigation is a listing of Node entities, so associate its
         // list cache tag for correct invalidation.
         '#cache' => [
diff --git a/core/modules/book/config/optional/core.entity_view_display.node.book.default.yml b/core/modules/book/config/optional/core.entity_view_display.node.book.default.yml
index 505ab1ee5d..2056a778af 100644
--- a/core/modules/book/config/optional/core.entity_view_display.node.book.default.yml
+++ b/core/modules/book/config/optional/core.entity_view_display.node.book.default.yml
@@ -19,7 +19,11 @@ content:
     third_party_settings: {  }
     weight: 100
     region: content
-  links:
+  book_navigation:
+    label: hidden
+    region: content
     weight: 101
+  links:
+    weight: 102
     region: content
 hidden: {  }
diff --git a/core/modules/book/config/optional/core.entity_view_display.node.book.teaser.yml b/core/modules/book/config/optional/core.entity_view_display.node.book.teaser.yml
index de88891169..ffd7c0aba6 100644
--- a/core/modules/book/config/optional/core.entity_view_display.node.book.teaser.yml
+++ b/core/modules/book/config/optional/core.entity_view_display.node.book.teaser.yml
@@ -21,7 +21,11 @@ content:
     third_party_settings: {  }
     weight: 100
     region: content
-  links:
+  book_navigation:
+    label: hidden
+    region: content
     weight: 101
+  links:
+    weight: 102
     region: content
 hidden: {  }
