diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/load/LoadEntity.php b/core/modules/migrate_drupal/src/Plugin/migrate/load/LoadEntity.php
index 603cb95..b3d4fa8 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/load/LoadEntity.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/load/LoadEntity.php
@@ -15,6 +15,7 @@
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\Plugin\SourceEntityInterface;
 use Drupal\migrate_drupal\Plugin\MigrateLoadInterface;
+use Drupal\field\Entity\FieldConfig;
 
 /**
  * Base class for entity load plugins.
@@ -84,6 +85,7 @@ public function loadMultiple(EntityStorageInterface $storage, array $sub_ids = N
         $migration->getSourcePlugin()->checkRequirements();
         $fields = array_keys($migration->getSourcePlugin()->fields());
         $migration->process += array_combine($fields, $fields);
+        $this->processProcess($migration->process, $id);
         $migrations[$migration->id()] = $migration;
       }
       catch (RequirementsException $e) {
@@ -94,4 +96,29 @@ public function loadMultiple(EntityStorageInterface $storage, array $sub_ids = N
     return $migrations;
   }
 
+  /**
+   * Manipulate the process array for per field processing.
+   *
+   * @param array $process
+   *   The process array for a migration.
+   * @param string $bundle
+   *   The node bundle.
+   */
+  protected function processProcess(&$process, $bundle) {
+    foreach ($process as $field_name => $mapping) {
+      // Specifically process the link field until core is fixed.
+      // @see https://www.drupal.org/node/2235457
+      if (($field = FieldConfig::loadByName('node', $bundle, $field_name)) && $field->getType() === 'link') {
+        $process[$field_name] = [
+          'plugin' => 'd6_cck_link',
+          'source' => [
+            $field_name,
+            $field_name . '_title',
+            $field_name . '_attributes',
+          ],
+        ];
+      }
+    }
+  }
+
 }
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/CckLink.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/CckLink.php
new file mode 100644
index 0000000..1978c92
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/CckLink.php
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_drupal\Plugin\migrate\process\d6\CckLink.
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\process\d6;
+
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Entity\MigrationInterface;
+use Drupal\migrate\MigrateExecutable;
+use Drupal\migrate\Plugin\MigratePluginManager;
+use Drupal\migrate\Row;
+use Drupal\migrate\Plugin\migrate\process\Route;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * @MigrateProcessPlugin(
+ *   id = "d6_cck_link"
+ * )
+ */
+class CckLink extends Route implements ContainerFactoryPluginInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transform($value, MigrateExecutable $migrate_executable, Row $row, $destination_property) {
+    list($url, $title, $attributes) = $value;
+
+    // @TODO, WTF, D6 double serializes the attributes?
+    $attributes = unserialize(unserialize($attributes));
+    $route_plugin_value = [$url, $attributes];
+    $route = parent::transform($route_plugin_value, $migrate_executable, $row, $destination_property);
+    $route['title'] = $title;
+    return $route;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/src/Tests/Dump/Drupal6FieldInstance.php b/core/modules/migrate_drupal/src/Tests/Dump/Drupal6FieldInstance.php
index 7bf45c3..c04e71d 100644
--- a/core/modules/migrate_drupal/src/Tests/Dump/Drupal6FieldInstance.php
+++ b/core/modules/migrate_drupal/src/Tests/Dump/Drupal6FieldInstance.php
@@ -1021,7 +1021,7 @@ public function load() {
       'global_settings' => 'a:7:{s:10:"attributes";a:4:{s:6:"target";s:7:"default";s:3:"rel";s:8:"nofollow";s:5:"class";s:0:"";s:5:"title";s:10:"Link Title";}s:7:"display";a:1:{s:10:"url_cutoff";s:2:"80";}s:3:"url";i:0;s:5:"title";s:8:"required";s:11:"title_value";s:0:"";s:13:"enable_tokens";s:0:"";s:12:"validate_url";i:1;}',
       'multiple' => 0,
       'db_storage' => 1,
-      'db_columns' => 'a:0:{}',
+      'db_columns' => 'a:3:{s:3:"url";a:4:{s:4:"type";s:7:"varchar";s:6:"length";i:2048;s:8:"not null";b:0;s:8:"sortable";b:1;}s:5:"title";a:4:{s:4:"type";s:7:"varchar";s:6:"length";i:255;s:8:"not null";b:0;s:8:"sortable";b:1;}s:10:"attributes";a:3:{s:4:"type";s:4:"text";s:4:"size";s:6:"medium";s:8:"not null";b:0;}}',
       'active' => 1,
     ))
     ->values(array(
diff --git a/core/modules/migrate_drupal/src/Tests/Dump/Drupal6Node.php b/core/modules/migrate_drupal/src/Tests/Dump/Drupal6Node.php
index 47b1330..d8216f5 100644
--- a/core/modules/migrate_drupal/src/Tests/Dump/Drupal6Node.php
+++ b/core/modules/migrate_drupal/src/Tests/Dump/Drupal6Node.php
@@ -513,6 +513,23 @@ public function load() {
           'unsigned' => TRUE,
           'not null' => FALSE
         ),
+        'field_test_link_url' => array(
+          'description' => 'The link field',
+          'type' => 'varchar',
+          'length' => 2048,
+          'not null' => FALSE,
+        ),
+        'field_test_link_title' => array(
+          'description' => 'The link field',
+          'type' => 'varchar',
+          'length' => 255,
+          'not null' => FALSE,
+        ),
+        'field_test_link_attributes' => array(
+          'description' => 'The link attributes',
+          'type' => 'text',
+          'not null' => FALSE,
+        ),
       ),
       'primary key' => array('vid'),
     ));
@@ -525,7 +542,10 @@ public function load() {
         'field_test_three_value',
         'field_test_integer_selectlist_value',
         'field_test_identical1_value',
-        'field_test_identical2_value'
+        'field_test_identical2_value',
+        'field_test_link_url',
+        'field_test_link_title',
+        'field_test_link_attributes',
       ))
       ->values(array(
         'nid' => 1,
@@ -535,6 +555,21 @@ public function load() {
         'field_test_integer_selectlist_value' => '3412',
         'field_test_identical1_value' => 1,
         'field_test_identical2_value' => 1,
+        'field_test_link_url' => 'http://google.com',
+        'field_test_link_title' => 'Google',
+        'field_test_link_attributes' => 's:6:"a:0:{}";',
+      ))
+      ->values(array(
+        'nid' => 2,
+        'vid' => 3,
+        'uid' => 1,
+        'field_test_three_value' => '23.2',
+        'field_test_integer_selectlist_value' => '1244',
+        'field_test_identical1_value' => 1,
+        'field_test_identical2_value' => 1,
+        'field_test_link_url' => 'http://groups.drupal.org/',
+        'field_test_link_title' => 'Drupal Groups',
+        'field_test_link_attributes' => 's:6:"a:0:{}";',
       ))
       ->execute();
     $this->setModuleVersion('content', 6001);
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateCckFieldValuesTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateCckFieldValuesTest.php
index 9d21794..f57cf8c 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateCckFieldValuesTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateCckFieldValuesTest.php
@@ -22,7 +22,7 @@ class MigrateCckFieldValuesTest extends MigrateNodeTestBase {
    *
    * @var array
    */
-  public static $modules = array('node', 'text');
+  public static $modules = array('node', 'text', 'link');
 
   /**
    * {@inheritdoc}
@@ -105,6 +105,17 @@ protected function setUp() {
       'bundle' => 'story',
     ))->save();
 
+    entity_create('field_storage_config', array(
+      'entity_type' => 'node',
+      'field_name' => 'field_test_link',
+      'type' => 'link',
+    ))->save();
+    entity_create('field_config', array(
+      'entity_type' => 'node',
+      'field_name' => 'field_test_link',
+      'bundle' => 'story',
+    ))->save();
+
     // Add some id mappings for the dependant migrations.
     $id_mappings = array(
       'd6_field_formatter_settings' => array(
@@ -143,10 +154,14 @@ public function testCckFields() {
     $this->assertEqual($node->field_test_identical1->value, '1', 'Integer value is correct');
     $this->assertEqual($node->field_test_identical2->value, '1', 'Integer value is correct');
 
+    // Test that link fields are migrated.
+    $this->assertEqual($node->field_test_link->url, 'http://google.com');
+    $this->assertEqual($node->field_test_link->title, 'Google');
+    $this->assertEqual($node->field_test_link->attributes, []);
+
     $planet_node = Node::load(3);
     $this->assertEqual($planet_node->field_multivalue->value, 33);
     $this->assertEqual($planet_node->field_multivalue[1]->value, 44);
-
   }
 
 }
