diff --git a/core/modules/link/src/Plugin/migrate/process/FieldLink.php b/core/modules/link/src/Plugin/migrate/process/FieldLink.php
index 143b7ea09be8ff0761bb4110746cf48fa0a956e0..14f615e3b4362caccab27c87c50b2538c4d4e3e5 100644
--- a/core/modules/link/src/Plugin/migrate/process/FieldLink.php
+++ b/core/modules/link/src/Plugin/migrate/process/FieldLink.php
@@ -60,10 +60,15 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
    */
   protected function canonicalizeUri($uri) {
     // If we already have a scheme, we're fine.
-    if (empty($uri) || parse_url($uri, PHP_URL_SCHEME)) {
+    if (parse_url($uri, PHP_URL_SCHEME)) {
       return $uri;
     }
 
+    // Empty URI and non-links are allowed.
+    if (empty($uri) || in_array($uri, ['<nolink>', '<none>'])) {
+      return 'route:<nolink>';
+    }
+
     // Remove the <front> component of the URL.
     if (strpos($uri, '<front>') === 0) {
       $uri = substr($uri, strlen('<front>'));
diff --git a/core/modules/link/tests/src/Unit/Plugin/migrate/process/FieldLinkTest.php b/core/modules/link/tests/src/Unit/Plugin/migrate/process/FieldLinkTest.php
index 18456aa86ac9d82938cdfb6275eb3e97bbd910ab..61853410584462eb760de196df3f8284623edfc4 100644
--- a/core/modules/link/tests/src/Unit/Plugin/migrate/process/FieldLinkTest.php
+++ b/core/modules/link/tests/src/Unit/Plugin/migrate/process/FieldLinkTest.php
@@ -86,6 +86,18 @@ public function canonicalizeUriDataProvider() {
         'http://www.example.com/page#links',
         'http://www.example.com/page#links',
       ],
+      'empty' => [
+        '',
+        'route:<nolink>',
+      ],
+      'No link' => [
+        '<nolink>',
+        'route:<nolink>',
+      ],
+      'none' => [
+        '<none>',
+        'route:<nolink>',
+      ],
     ];
   }