diff --git a/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkFormatter.php b/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkFormatter.php
index 921970d..fdeee28 100644
--- a/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkFormatter.php
+++ b/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkFormatter.php
@@ -149,6 +149,14 @@ public function viewElements(FieldItemListInterface $items) {
           '#href' => $link['path'],
           '#options' => $link['options'],
         );
+
+        if (!empty($item->_attributes)) {
+          $element[$delta]['#options'] += array ('attributes' => array());
+          $element[$delta]['#options']['attributes'] += $item->_attributes;
+          // Unset field item attributes since they have been included in the
+          // formatter output and should not be rendered in the field template.
+          unset($item->_attributes);
+        }
       }
     }
 
diff --git a/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php b/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php
index 4392123..0a3cb57 100644
--- a/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php
+++ b/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php
@@ -72,6 +72,14 @@ public function viewElements(FieldItemListInterface $items) {
         '#href' => $link['path'],
         '#options' => $link['options'],
       );
+
+      if (!empty($item->_attributes)) {
+        $element[$delta]['#options'] += array('attributes' => array());
+        $element[$delta]['#options']['attributes'] += $item->_attributes;
+        // Unset field item attributes since they have been included in the
+        // formatter output and should not be rendered in the field template.
+        unset($item->_attributes);
+      }
     }
     return $element;
   }
diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/Field/LinkFieldRdfaTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/Field/LinkFieldRdfaTest.php
new file mode 100644
index 0000000..2bf0003
--- /dev/null
+++ b/core/modules/rdf/lib/Drupal/rdf/Tests/Field/LinkFieldRdfaTest.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\rdf\Tests\Field\LinkFieldRdfaTest.
+ */
+
+namespace Drupal\rdf\Tests\Field;
+
+use Drupal\rdf\Tests\Field\FieldRdfaTestBase;
+
+/**
+ * Tests the placement of RDFa in email field formatters.
+ */
+class LinkFieldRdfaTest extends FieldRdfaTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $fieldType = 'link';
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = array('link', 'text');
+
+  public static function getInfo() {
+    return array(
+      'name'  => 'Field formatter: link',
+      'description'  => 'Tests RDFa output by link field formatters.',
+      'group' => 'RDF',
+    );
+  }
+
+  public function setUp() {
+    parent::setUp();
+
+    $this->createTestField();
+
+    // Add the mapping.
+    $mapping = rdf_get_mapping('entity_test', 'entity_test');
+    $mapping->setFieldMapping($this->fieldName, array(
+      'properties' => array('schema:link'),
+    ))->save();
+
+    // Set up test values.
+    $this->testValue = 'http://test.me';
+    $this->entity = entity_create('entity_test', array());
+    $this->entity->{$this->fieldName}->url = $this->testValue;
+  }
+
+  /**
+   * Tests all link formatters.
+   */
+  public function testAllFormatters() {
+    // Test the link formatter.
+    $this->assertFormatterRdfa('link', 'http://schema.org/link', $this->testValue, 'uri');
+    // Test the link_separate formatter.
+    $this->assertFormatterRdfa('link_separate', 'http://schema.org/link', $this->testValue, 'uri');
+  }
+
+}
