diff --git a/core/modules/book/config/install/node.type.book.yml b/core/modules/book/config/install/node.type.book.yml
index e7ad5f7af73ffa4987ceb8b33f4d2f66d27156d0..d2409d487cbdfc0eaafc0030cd46a4683514c77f 100644
--- a/core/modules/book/config/install/node.type.book.yml
+++ b/core/modules/book/config/install/node.type.book.yml
@@ -2,7 +2,6 @@ type: book
 name: 'Book page'
 description: '<em>Books</em> have a built-in hierarchical navigation. Use for handbooks or tutorials.'
 help: ''
-has_title: true
 title_label: Title
 settings:
   node:
diff --git a/core/modules/forum/config/install/node.type.forum.yml b/core/modules/forum/config/install/node.type.forum.yml
index 011600f50bca17eb5ff6972a7cf6515cad8e2532..f2e86af663a48dde44f6c0419c5480bb97604d84 100644
--- a/core/modules/forum/config/install/node.type.forum.yml
+++ b/core/modules/forum/config/install/node.type.forum.yml
@@ -2,7 +2,6 @@ type: forum
 name: 'Forum topic'
 description: 'A <em>forum topic</em> starts a new discussion thread within a forum.'
 help: ''
-has_title: true
 title_label: Subject
 settings:
   node:
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_type.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_type.yml
index ce4e9e85e33bb92d083fae8dcd12388c3cbd7ba8..fe918101e7cd44dd67aa88f57f56ceff20ffa853 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_type.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_type.yml
@@ -11,7 +11,6 @@ process:
   module: module
   description: description
   help: help
-  has_title: has_title
   title_label: title_label
   preview: constants.preview
   submitted: submitted
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/NodeType.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/NodeType.php
index 4120de35d2b2c548864922166e67469e4f1e29a9..592f8b8091f496fab15761e60c092da9a4b7c0df 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/NodeType.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/NodeType.php
@@ -51,7 +51,6 @@ public function query() {
         'module',
         'description',
         'help',
-        'has_title',
         'title_label',
         'has_body',
         'body_label',
@@ -74,7 +73,6 @@ public function fields() {
       'module' => $this->t('The module providing the node type.'),
       'description' => $this->t('Description of the node type.'),
       'help' => $this->t('Help text for the node type.'),
-      'has_title' => $this->t('Flag indicating the node type has a title.'),
       'title_label' => $this->t('Title label.'),
       'has_body' => $this->t('Flag indicating the node type has a body field.'),
       'body_label' => $this->t('Body label.'),
diff --git a/core/modules/migrate_drupal/tests/src/source/d6/NodeTypeTest.php b/core/modules/migrate_drupal/tests/src/source/d6/NodeTypeTest.php
index e38aba6a99957d02ce1ffe06b9082f5e8e40c940..ab22f18ecca60ffe06456e49e786e7fd7f1bbe9c 100644
--- a/core/modules/migrate_drupal/tests/src/source/d6/NodeTypeTest.php
+++ b/core/modules/migrate_drupal/tests/src/source/d6/NodeTypeTest.php
@@ -41,7 +41,6 @@ class NodeTypeTest extends MigrateSqlSourceTestCase {
       'module' => 'node',
       'description' => 'A <em>page</em>, similar in form to a <em>story</em>, is a simple method for creating and displaying information that rarely changes, such as an "About us" section of a website. By default, a <em>page</em> entry does not allow visitor comments and is not featured on the site\'s initial home page.',
       'help' => '',
-      'has_title' => 1,
       'title_label' => 'Title',
       'has_body' => 1,
       'body_label' => 'Body',
@@ -57,7 +56,6 @@ class NodeTypeTest extends MigrateSqlSourceTestCase {
       'module' => 'node',
       'description' => 'A <em>story</em>, similar in form to a <em>page</em>, is ideal for creating and displaying content that informs or engages website visitors. Press releases, site announcements, and informal blog-like entries may all be created with a <em>story</em> entry. By default, a <em>story</em> entry is automatically featured on the site\'s initial home page, and provides the ability to post comments.',
       'help' => '',
-      'has_title' => 1,
       'title_label' => 'Title',
       'has_body' => 1,
       'body_label' => 'Body',
diff --git a/core/modules/node/config/schema/node.schema.yml b/core/modules/node/config/schema/node.schema.yml
index 8ebe3742907889b71891292eb1e8e2a271d62565..81e097735ebd9a2758e9297673852cafdb913fe2 100644
--- a/core/modules/node/config/schema/node.schema.yml
+++ b/core/modules/node/config/schema/node.schema.yml
@@ -27,9 +27,6 @@ node.type.*:
     help:
       type: text
       label: 'Explanation or submission guidelines'
-    has_title:
-      type: boolean
-      label: 'Has title'
     title_label:
       type: label
       label: 'Title field label'
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 45c304363fe284a94f08846d401626b1627eedda..d4f7db02f9aedbb907dae6d7fee532b71a38bdc9 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -209,11 +209,6 @@ function node_entity_view_display_alter(EntityViewDisplayInterface $display, $co
 function node_entity_form_display_alter(EntityFormDisplayInterface $form_display, $context) {
   if ($context['entity_type'] == 'node') {
     $node_type = node_type_load($context['bundle']);
-    // @todo Reconsider when per-bundle overrides of field definitions are
-    //   possible - https://drupal.org/node/2114707.
-    if (!$node_type->has_title) {
-      $form_display->removeComponent('title');
-    }
   }
 }
 
diff --git a/core/modules/node/src/Entity/NodeType.php b/core/modules/node/src/Entity/NodeType.php
index 2c7d3b2b376ba7cdc542a9e370422bdc7f9c006d..ecc21ea03f931e2c48385b3c7d2d0d0133cb5fcc 100644
--- a/core/modules/node/src/Entity/NodeType.php
+++ b/core/modules/node/src/Entity/NodeType.php
@@ -75,15 +75,6 @@ class NodeType extends ConfigEntityBundleBase implements NodeTypeInterface {
    */
   public $help;
 
-  /**
-   * Indicates whether the Node entity of this type has a title.
-   *
-   * @var bool
-   *
-   * @todo Rename to $node_has_title.
-   */
-  public $has_title = TRUE;
-
   /**
    * The label to use for the title of a Node of this type in the user interface.
    *
diff --git a/core/modules/node/src/NodeTypeForm.php b/core/modules/node/src/NodeTypeForm.php
index 4d87e03760c7fd854b4caceba383a9b1134f4d8a..ec00d507ff45b5e71fc6f0578288749de38d226f 100644
--- a/core/modules/node/src/NodeTypeForm.php
+++ b/core/modules/node/src/NodeTypeForm.php
@@ -83,13 +83,6 @@ public function form(array $form, array &$form_state) {
       '#default_value' => $type->title_label,
       '#required' => TRUE,
     );
-    if (!$type->has_title) {
-      // Avoid overwriting a content type that intentionally does not have a
-      // title field.
-      $form['submission']['title_label']['#attributes'] = array('disabled' => 'disabled');
-      $form['submission']['title_label']['#description'] = t('This content type does not have a title field.');
-      $form['submission']['title_label']['#required'] = FALSE;
-    }
     $form['submission']['preview'] = array(
       '#type' => 'radios',
       '#title' => t('Preview before submitting'),
@@ -187,10 +180,6 @@ public function save(array $form, array &$form_state) {
     $type->type = trim($type->id());
     $type->name = trim($type->name);
 
-    // title_label is required in core; has_title will always be TRUE, unless a
-    // module alters the title field.
-    $type->has_title = ($type->title_label != '');
-
     $status = $type->save();
 
     $t_args = array('%name' => $type->label());
diff --git a/core/modules/node/tests/modules/node_test_config/config/install/node.type.default.yml b/core/modules/node/tests/modules/node_test_config/config/install/node.type.default.yml
index e28a0e48914c7bb0c6ef47458e3cdf7b1401cfbb..824ec4e71561b82075114b6bb281d74d7ed1d974 100644
--- a/core/modules/node/tests/modules/node_test_config/config/install/node.type.default.yml
+++ b/core/modules/node/tests/modules/node_test_config/config/install/node.type.default.yml
@@ -2,7 +2,6 @@ type: default
 name: Default
 description: 'Default description.'
 help: ''
-has_title: true
 title_label: Title
 settings:
   node:
diff --git a/core/modules/node/tests/modules/node_test_config/staging/node.type.import.yml b/core/modules/node/tests/modules/node_test_config/staging/node.type.import.yml
index 214e53a5381ba2c1070304f3bcb3aea6140dcd5b..c88d9a8f92ae76590da0f102e4d6b69c01d9cedd 100644
--- a/core/modules/node/tests/modules/node_test_config/staging/node.type.import.yml
+++ b/core/modules/node/tests/modules/node_test_config/staging/node.type.import.yml
@@ -2,7 +2,6 @@ type: import
 name: Import
 description: 'Import description.'
 help: ''
-has_title: true
 title_label: Title
 settings:
   node:
diff --git a/core/modules/system/entity.api.php b/core/modules/system/entity.api.php
index 50b9f6a5ee1c3047f260200010feb57a64ec1c0e..ddc302ab4c47e2cd07b963c1fc1f7a8473e81d0a 100644
--- a/core/modules/system/entity.api.php
+++ b/core/modules/system/entity.api.php
@@ -984,13 +984,6 @@ function hook_entity_extra_field_info() {
   $description = t('Node module element');
 
   foreach (node_type_get_types() as $bundle) {
-    if ($bundle->has_title) {
-      $extra['node'][$bundle->type]['form']['title'] = array(
-        'label' => String::checkPlain($bundle->title_label),
-        'description' => $description,
-        'weight' => -5,
-      );
-    }
 
     // Add also the 'language' select if Language module is enabled and the
     // bundle has multilingual support.
diff --git a/core/profiles/standard/config/install/node.type.article.yml b/core/profiles/standard/config/install/node.type.article.yml
index 2c58ec6ffb76c6239ada4fffb4bf71b2921f68d6..b7a7f6be04834fb517a3aa73e4bb18d0d03245b1 100644
--- a/core/profiles/standard/config/install/node.type.article.yml
+++ b/core/profiles/standard/config/install/node.type.article.yml
@@ -2,7 +2,6 @@ type: article
 name: Article
 description: 'Use <em>articles</em> for time-sensitive content like news, press releases or blog posts.'
 help: ''
-has_title: true
 title_label: Title
 settings:
   node:
diff --git a/core/profiles/standard/config/install/node.type.page.yml b/core/profiles/standard/config/install/node.type.page.yml
index f72d0c69d8dc9af7abdb1703f982e033fa2a0609..1c9cdfe223f13558a2f2a47faf3adaaa4353bcd8 100644
--- a/core/profiles/standard/config/install/node.type.page.yml
+++ b/core/profiles/standard/config/install/node.type.page.yml
@@ -2,7 +2,6 @@ type: page
 name: 'Basic page'
 description: 'Use <em>basic pages</em> for your static content, such as an ''About us'' page.'
 help: ''
-has_title: true
 title_label: Title
 settings:
   node: