diff --git a/core/config/schema/core.data_types.schema.yml b/core/config/schema/core.data_types.schema.yml
index 9278240..8230d3e 100644
--- a/core/config/schema/core.data_types.schema.yml
+++ b/core/config/schema/core.data_types.schema.yml
@@ -207,6 +207,12 @@ theme_settings:
         use_default:
           type: boolean
           label: 'Use default'
+        alt:
+          type: label
+          label: 'Logo alternative text'
+        title:
+          type: label
+          label: 'Logo title'
     third_party_settings:
       type: sequence
       label: 'Third party settings'
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 4cc6424..6051b7f 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -475,6 +475,12 @@ function theme_settings_convert_to_config(array $theme_settings, Config $config)
     elseif ($key == 'logo_path') {
       $config->set('logo.path', $value);
     }
+    elseif ($key == 'alt') {
+      $config->set('logo.alt', $value);
+    }
+    elseif ($key == 'title') {
+      $config->set('logo.title', $value);
+    }
     elseif ($key == 'default_favicon') {
       $config->set('favicon.use_default', $value);
     }
diff --git a/core/modules/system/config/install/system.theme.global.yml b/core/modules/system/config/install/system.theme.global.yml
index b8da423..93f9832 100644
--- a/core/modules/system/config/install/system.theme.global.yml
+++ b/core/modules/system/config/install/system.theme.global.yml
@@ -12,3 +12,5 @@ logo:
   path: ''
   url: ''
   use_default: true
+  alt: 'Home'
+  title: 'Home'
diff --git a/core/modules/system/src/Form/ThemeSettingsForm.php b/core/modules/system/src/Form/ThemeSettingsForm.php
index f5cfb09..cd617db 100644
--- a/core/modules/system/src/Form/ThemeSettingsForm.php
+++ b/core/modules/system/src/Form/ThemeSettingsForm.php
@@ -212,7 +212,23 @@ public function buildForm(array $form, FormStateInterface $form_state, $theme =
         '#type' => 'file',
         '#title' => t('Upload logo image'),
         '#maxlength' => 40,
-        '#description' => t("If you don't have direct file access to the server, use this field to upload your logo.")
+        '#description' => t("If you don't have direct file access to the server, use this field to upload your logo."),
+      ];
+      $form['logo']['alt'] = [
+        '#type' => 'textfield',
+        '#title' => $this->t('Logo alternative text'),
+        '#description' => $this->t('This text will be used by screen readers, or when the image cannot be loaded.'),
+        // @see https://www.drupal.org/node/465106#alt-text
+        '#maxlength' => 512,
+        '#default_value' => theme_get_setting('logo.alt', $theme),
+        '#required' => TRUE,
+      ];
+      $form['logo']['title'] = [
+        '#type' => 'textfield',
+        '#title' => $this->t('Logo title'),
+        '#description' => $this->t('The title is used as a tool tip when the user hovers the mouse over the image.'),
+        '#maxlength' => 1024,
+        '#default_value' => theme_get_setting('logo.title', $theme),
       ];
     }
 
diff --git a/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php b/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php
index 3305285..7c9c99e 100644
--- a/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php
@@ -156,10 +156,20 @@ public function build() {
     $build['site_logo'] = [
       '#theme' => 'image',
       '#uri' => theme_get_setting('logo.url'),
-      '#alt' => $this->t('Home'),
+      '#alt' => theme_get_setting('logo.alt'),
+      '#title' => theme_get_setting('logo.title'),
       '#access' => $this->configuration['use_site_logo'],
     ];
 
+    $build['site_logo_alt'] = [
+      '#markup' => theme_get_setting('logo.alt'),
+      '#access' => $this->configuration['use_site_logo'],
+    ];
+
+    $build['site_logo_title'] = [
+      '#markup' => theme_get_setting('logo.title'),
+      '#access' => $this->configuration['use_site_logo'],
+    ];
     $build['site_name'] = [
       '#markup' => $site_config->get('name'),
       '#access' => $this->configuration['use_site_name'],
diff --git a/core/modules/system/src/Tests/System/ThemeTest.php b/core/modules/system/src/Tests/System/ThemeTest.php
index 29d88a3..69a1f08 100644
--- a/core/modules/system/src/Tests/System/ThemeTest.php
+++ b/core/modules/system/src/Tests/System/ThemeTest.php
@@ -225,10 +225,28 @@ public function testThemeSettingsLogo() {
     $edit = [
       'default_logo' => FALSE,
       'logo_path' => 'core/misc/druplicon.png',
+      'alt' => 'Druplicon alt',
+      'title' => 'Druplicon title',
     ];
     $this->drupalPostForm('admin/appearance/settings/bartik', $edit, t('Save configuration'));
     $this->assertFieldByName('default_logo', FALSE);
     $this->assertFieldByName('logo_path', 'core/misc/druplicon.png');
+    $this->assertFieldByName('alt', 'Druplicon alt');
+    $this->assertFieldByName('title', 'Druplicon title');
+
+    // Make sure the alt and title attributes are rendered properly.
+    $this->config('system.theme')->set('default', 'bartik')->save();
+    $this->drupalPlaceBlock('system_branding_block', ['region' => 'header']);
+    $this->drupalGet('');
+    // Test the title attribute on the site's logo a tag.
+    $elements = $this->xpath('//header//a[contains(@class, :class)]', [':class' => 'site-branding__logo']);
+    $this->assertEqual($elements[0]['title'], 'Druplicon title');
+    // Test the alt attribute on the site's logo img tag.
+    $elements = $this->xpath('//header//a[contains(@class, :class)]/img', [':class' => 'site-branding__logo']);
+    $this->assertEqual($elements[0]['alt'], 'Druplicon alt');
+    // Test the title attribute on the site name a tag.
+    $elements = $this->xpath('//header//div[contains(@class, :class)]/a', [':class' => 'site-branding__name']);
+    $this->assertEqual($elements[0]['title'], 'Druplicon title');
 
     // Make sure the logo and favicon settings are not available when the file
     // module is not enabled.
diff --git a/core/modules/system/src/Tests/Update/SiteLogoAltTitleAddedTest.php b/core/modules/system/src/Tests/Update/SiteLogoAltTitleAddedTest.php
new file mode 100644
index 0000000..fcd702b
--- /dev/null
+++ b/core/modules/system/src/Tests/Update/SiteLogoAltTitleAddedTest.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace Drupal\system\Tests\Update;
+
+/**
+ * Tests that the Site's logo alt and title values are added to each enabled
+ * theme as well as to the global theme settings.
+ *
+ * @see https://www.drupal.org/node/2780293
+ *
+ * @group system
+ */
+class SiteLogoAltTitleAddedTest extends UpdatePathTestBase {
+
+  /**
+   * The theme handler.
+   *
+   * @var \Drupal\Core\Extension\ThemeHandlerInterface
+   */
+  protected $themeHandler;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->themeHandler = $this->container->get('theme_handler');
+  }
+
+  /**
+   * Tests system_update_8302().
+   */
+  public function testSiteLogoAltTitleAdded() {
+    $this->runUpdates();
+    $this->themeHandler->refreshInfo();
+
+    // Check that the global theme settings have the expected values after the
+    // update.
+    $this->assertEqual($this->config('system.theme.global')->get('logo.alt'), 'Home');
+    $this->assertEqual($this->config('system.theme.global')->get('logo.title'), 'Home');
+
+    // Check that each enabled theme has the exepected valuesafter the update.
+    foreach ($this->themeHandler->listInfo() as $theme) {
+      $this->assertEqual($this->config($theme->getName() . '.settings')->get('logo.alt'), 'Home');
+      $this->assertEqual($this->config($theme->getName() . '.settings')->get('logo.title'), 'Home');
+    }
+  }
+
+}
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 614ad9e..99c6a48 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -1927,3 +1927,26 @@ function system_update_8400(&$sandbox) {
 
   $sandbox['#finished'] = $sandbox['current'] == $sandbox['max'];
 }
+
+/**
+ * Set the default Logo alt and title.
+ */
+function system_update_8302() {
+  // Set the values for the global theme settings.
+  \Drupal::configFactory()->getEditable('system.theme.global')
+    ->set('logo.alt', 'Home')
+    ->set('logo.title', 'Home')
+    ->save(TRUE);
+
+  // Set the values for all currently installed themes.
+  $theme_handler = \Drupal::service('theme_handler');
+  foreach ($theme_handler->listInfo() as $theme) {
+    $theme_settings = \Drupal::configFactory()->getEditable($theme->getName() . '.settings');
+    if (!$theme_settings->isNew()) {
+      $theme_settings
+        ->set('logo.alt', 'Home')
+        ->set('logo.title', 'Home')
+        ->save(TRUE);
+    }
+  }
+}
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index a1a6b71..d4440f0 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -865,6 +865,14 @@ function system_preprocess_block(&$variables) {
       if ($variables['content']['site_logo']['#access'] && $variables['content']['site_logo']['#uri']) {
         $variables['site_logo'] = $variables['content']['site_logo']['#uri'];
       }
+      $variables['site_logo_alt'] = '';
+      if ($variables['content']['site_logo_alt']['#access'] && $variables['content']['site_logo_alt']['#markup']) {
+        $variables['site_logo_alt'] = $variables['content']['site_logo_alt']['#markup'];
+      }
+      $variables['site_logo_title'] = '';
+      if ($variables['content']['site_logo_title']['#access'] && $variables['content']['site_logo_title']['#markup']) {
+        $variables['site_logo_title'] = $variables['content']['site_logo_title']['#markup'];
+      }
       $variables['site_name'] = '';
       if ($variables['content']['site_name']['#access'] && $variables['content']['site_name']['#markup']) {
         $variables['site_name'] = $variables['content']['site_name']['#markup'];
diff --git a/core/modules/system/templates/block--system-branding-block.html.twig b/core/modules/system/templates/block--system-branding-block.html.twig
index 2a98687..bb1fb4f 100644
--- a/core/modules/system/templates/block--system-branding-block.html.twig
+++ b/core/modules/system/templates/block--system-branding-block.html.twig
@@ -11,18 +11,20 @@
  * - site_logo: Logo for site as defined in Appearance or theme settings.
  * - site_name: Name for site as defined in Site information settings.
  * - site_slogan: Slogan for site as defined in Site information settings.
+ * - site_logo_alt: The alt attribute text for the site logo.
+ * - site_logo_title: The title attribute text for the site logo.
  *
  * @ingroup themeable
  */
 #}
 {% block content %}
   {% if site_logo %}
-    <a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">
-      <img src="{{ site_logo }}" alt="{{ 'Home'|t }}" />
+    <a href="{{ path('<front>') }}" title="{{ site_logo_title }}" rel="home">
+      <img src="{{ site_logo }}" alt="{{ site_logo_alt }}" />
     </a>
   {% endif %}
   {% if site_name %}
-    <a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>
+    <a href="{{ path('<front>') }}" title="{{ site_logo_title }}" rel="home">{{ site_name }}</a>
   {% endif %}
   {{ site_slogan }}
 {% endblock %}
diff --git a/core/themes/bartik/templates/block--system-branding-block.html.twig b/core/themes/bartik/templates/block--system-branding-block.html.twig
index 9bf4f3d..7b40070 100644
--- a/core/themes/bartik/templates/block--system-branding-block.html.twig
+++ b/core/themes/bartik/templates/block--system-branding-block.html.twig
@@ -11,20 +11,22 @@
  * - site_logo: Logo for site as defined in Appearance or theme settings.
  * - site_name: Name for site as defined in Site information settings.
  * - site_slogan: Slogan for site as defined in Site information settings.
+ * - site_logo_alt: The alt attribute text for the site logo.
+ * - site_logo_title: The title attribute text for the site logo.
  */
 #}
 {% set attributes = attributes.addClass('site-branding') %}
 {% block content %}
   {% if site_logo %}
-    <a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home" class="site-branding__logo">
-      <img src="{{ site_logo }}" alt="{{ 'Home'|t }}" />
+    <a href="{{ path('<front>') }}" title="{{ site_logo_title }}" rel="home" class="site-branding__logo">
+      <img src="{{ site_logo }}" alt="{{ site_logo_alt }}" />
     </a>
   {% endif %}
   {% if site_name or site_slogan %}
     <div class="site-branding__text">
       {% if site_name %}
         <div class="site-branding__name">
-          <a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>
+          <a href="{{ path('<front>') }}" title="{{ site_logo_title }}" rel="home">{{ site_name }}</a>
         </div>
       {% endif %}
       {% if site_slogan %}
diff --git a/core/themes/classy/templates/block/block--system-branding-block.html.twig b/core/themes/classy/templates/block/block--system-branding-block.html.twig
index 7c3b7de..d24baf9 100644
--- a/core/themes/classy/templates/block/block--system-branding-block.html.twig
+++ b/core/themes/classy/templates/block/block--system-branding-block.html.twig
@@ -11,17 +11,19 @@
  * - site_logo: Logo for site as defined in Appearance or theme settings.
  * - site_name: Name for site as defined in Site information settings.
  * - site_slogan: Slogan for site as defined in Site information settings.
+ * - site_logo_alt: The alt attribute text for the site logo.
+ * - site_logo_title: The title attribute text for the site logo.
  */
 #}
 {% block content %}
   {% if site_logo %}
-    <a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home" class="site-logo">
-      <img src="{{ site_logo }}" alt="{{ 'Home'|t }}" />
+    <a href="{{ path('<front>') }}" title="{{ site_logo_title }}" rel="home" class="site-logo">
+      <img src="{{ site_logo }}" alt="{{ site_logo_alt }}" />
     </a>
   {% endif %}
   {% if site_name %}
     <div class="site-name">
-      <a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>
+      <a href="{{ path('<front>') }}" title="{{ site_logo_title }}" rel="home">{{ site_name }}</a>
     </div>
   {% endif %}
   {% if site_slogan %}
diff --git a/core/themes/stable/templates/block/block--system-branding-block.html.twig b/core/themes/stable/templates/block/block--system-branding-block.html.twig
index 186b360..67e35c6 100644
--- a/core/themes/stable/templates/block/block--system-branding-block.html.twig
+++ b/core/themes/stable/templates/block/block--system-branding-block.html.twig
@@ -11,16 +11,18 @@
  * - site_logo: Logo for site as defined in Appearance or theme settings.
  * - site_name: Name for site as defined in Site information settings.
  * - site_slogan: Slogan for site as defined in Site information settings.
+ * - site_logo_alt: The alt attribute text for the site logo.
+ * - site_logo_title: The title attribute text for the site logo.
  */
 #}
 {% block content %}
   {% if site_logo %}
-    <a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">
-      <img src="{{ site_logo }}" alt="{{ 'Home'|t }}" />
+    <a href="{{ path('<front>') }}" title="{{ site_logo_title }}" rel="home">
+      <img src="{{ site_logo }}" alt="{{ site_logo_alt }}" />
     </a>
   {% endif %}
   {% if site_name %}
-    <a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>
+    <a href="{{ path('<front>') }}" title="{{ site_logo_title }}" rel="home">{{ site_name }}</a>
   {% endif %}
   {{ site_slogan }}
 {% endblock %}
