diff --git a/core/modules/locale/locale.install b/core/modules/locale/locale.install
index 197eded..0fa0b24 100644
--- a/core/modules/locale/locale.install
+++ b/core/modules/locale/locale.install
@@ -260,7 +260,7 @@ function locale_requirements($phase) {
           if ($available_updates) {
             $requirements['locale_translation'] = array(
               'title' => 'Translation update status',
-              'value' => l(t('Updates available'), 'admin/reports/translations'),
+              'value' => \Drupal::l(t('Updates available'), 'locale.translate_status'),
               'severity' => REQUIREMENT_WARNING,
               'description' => t('Updates available for: @languages. See the <a href="@updates">Available translation updates</a> page for more information.', array('@languages' => implode(', ', $available_updates), '@updates' => url('admin/reports/translations'))),
             );
@@ -285,7 +285,7 @@ function locale_requirements($phase) {
       else {
         $requirements['locale_translation'] = array(
           'title' => 'Translation update status',
-          'value' => l(t('Can not determine status'), 'admin/reports/translations'),
+          'value' => \Drupal::l(t('Can not determine status'), 'locale.translate_status'),
           'severity' => REQUIREMENT_WARNING,
           'description' => t('No translation status is available. See the <a href="@updates">Available translation updates</a> page for more information.', array('@updates' => url('admin/reports/translations'))),
         );
diff --git a/core/modules/locale/locale.module b/core/modules/locale/locale.module
index fe938a3..44ba8af 100644
--- a/core/modules/locale/locale.module
+++ b/core/modules/locale/locale.module
@@ -594,13 +594,13 @@ function locale_form_language_admin_overview_form_alter(&$form, FormStateInterfa
     );
     if (!$language->locked && ($langcode != 'en' || locale_translate_english())) {
       $form['languages'][$langcode]['locale_statistics'] = array(
-        '#markup' => l(
+        '#markup' => \Drupal::l(
           t('@translated/@total (@ratio%)', array(
             '@translated' => $stats[$langcode]['translated'],
             '@total' => $total_strings,
             '@ratio' => $stats[$langcode]['ratio'],
           )),
-          'admin/config/regional/translate',
+          'locale.translate_page', array(),
           array('query' => array('langcode' => $langcode))
         ),
       );
diff --git a/core/modules/locale/locale.pages.inc b/core/modules/locale/locale.pages.inc
index dc6043b..6586ad4 100644
--- a/core/modules/locale/locale.pages.inc
+++ b/core/modules/locale/locale.pages.inc
@@ -157,5 +157,5 @@ function template_preprocess_locale_translation_last_check(&$variables) {
   $last = $variables['last'];
   $variables['last_checked'] = ($last != NULL);
   $variables['time'] = \Drupal::service('date.formatter')->formatInterval(REQUEST_TIME - $last);
-  $variables['link'] = l(t('Check manually'), 'admin/reports/translations/check', array('query' => drupal_get_destination()));
+  $variables['link'] = \Drupal::l(t('Check manually'), 'locale.check_translation', array(), array('query' => drupal_get_destination()));
 }
diff --git a/core/modules/node/node.admin.inc b/core/modules/node/node.admin.inc
index b0a806d..fad16b0 100644
--- a/core/modules/node/node.admin.inc
+++ b/core/modules/node/node.admin.inc
@@ -128,7 +128,7 @@ function _node_mass_update_batch_process(array $nodes, array $updates, $load, $r
     $node = _node_mass_update_helper($node, $updates);
 
     // Store result for post-processing in the finished callback.
-    $context['results'][] = l($node->label(), 'node/' . $node->id());
+    $context['results'][] = \Drupal::l($node->label(), 'entity.node.canonical', array('node' => $node->id()));
 
     // Update our progress information.
     $context['sandbox']['progress']++;
diff --git a/core/modules/node/node.install b/core/modules/node/node.install
index be6d938..fbe4313 100644
--- a/core/modules/node/node.install
+++ b/core/modules/node/node.install
@@ -32,7 +32,7 @@ function node_requirements($phase) {
       'value' => $value,
       // The result of t() is safe and so is the result of l(). Preserving
       // safe object.
-      'description' => SafeMarkup::set($description . ' ' . l(t('Rebuild permissions'), 'admin/reports/status/rebuild')),
+      'description' => SafeMarkup::set($description . ' ' . \Drupal::l(t('Rebuild permissions'), 'node.configure_rebuild_confirm')),
     );
   }
   return $requirements;
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 091d601..6ec3465 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -202,7 +202,7 @@ function node_title_list($result, $title = NULL) {
   $num_rows = FALSE;
   foreach ($result as $node) {
     // Do not use $node->label() here, because $node comes from the database.
-    $items[] = l($node->title, 'node/' . $node->nid, !empty($node->comment_count) ? array('attributes' => array('title' => format_plural($node->comment_count, '1 comment', '@count comments'))) : array());
+    $items[] = \Drupal::l($node->title, 'entity.node.canonical', array('node' => $node->nid), !empty($node->comment_count) ? array('attributes' => array('title' => format_plural($node->comment_count, '1 comment', '@count comments'))) : array());
     $num_rows = TRUE;
   }
 
diff --git a/core/modules/node/node.pages.inc b/core/modules/node/node.pages.inc
index 517a5d5..a7d7769 100644
--- a/core/modules/node/node.pages.inc
+++ b/core/modules/node/node.pages.inc
@@ -31,7 +31,7 @@ function template_preprocess_node_add_list(&$variables) {
     foreach ($variables['content'] as $type) {
       $variables['types'][$type->type] = array(
         'type' => $type->type,
-        'add_link' => l($type->name, 'node/add/' . $type->type),
+        'add_link' => \Drupal::l($type->name, 'node.add', array('node_type' => $type->type)),
         'description' => Xss::filterAdmin($type->description),
       );
     }
diff --git a/core/modules/node/src/NodeForm.php b/core/modules/node/src/NodeForm.php
index 45343d5..70c2cfe 100644
--- a/core/modules/node/src/NodeForm.php
+++ b/core/modules/node/src/NodeForm.php
@@ -408,7 +408,7 @@ public function save(array $form, FormStateInterface $form_state) {
     $node = $this->entity;
     $insert = $node->isNew();
     $node->save();
-    $node_link = l(t('View'), 'node/' . $node->id());
+    $node_link = \Drupal::l(t('View'), 'entity.node.canonical', array('node' => $node->id()));
     $context = array('@type' => $node->getType(), '%title' => $node->label(), 'link' => $node_link);
     $t_args = array('@type' => node_get_type_label($node), '%title' => $node->label());
 
diff --git a/core/modules/node/src/NodeTypeForm.php b/core/modules/node/src/NodeTypeForm.php
index e60ee82..e99d860 100644
--- a/core/modules/node/src/NodeTypeForm.php
+++ b/core/modules/node/src/NodeTypeForm.php
@@ -230,7 +230,7 @@ public function save(array $form, FormStateInterface $form_state) {
     }
     elseif ($status == SAVED_NEW) {
       drupal_set_message(t('The content type %name has been added.', $t_args));
-      $context = array_merge($t_args, array('link' => l(t('View'), 'admin/structure/types')));
+      $context = array_merge($t_args, array('link' => \Drupal::l(t('View'), 'node.overview_types')));
       $this->logger('node')->notice('Added content type %name.', $context);
     }
 
diff --git a/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php b/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php
index fe129f8..ceb71f7 100644
--- a/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php
+++ b/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php
@@ -48,7 +48,7 @@ protected function setUp() {
     // Link the node to itself to test that it's only indexed once. The content
     // also needs the word "pizza" so we can use it as the search keyword.
     $body_key = 'body[0][value]';
-    $edit[$body_key] = l($node->label(), 'node/' . $node->id()) . ' pizza sandwich';
+    $edit[$body_key] = \Drupal::l($node->label(), 'entity.node.canonical', array('node' => $node->id())) . ' pizza sandwich';
     $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save and keep published'));
 
     $this->container->get('plugin.manager.search')->createInstance('node_search')->updateIndex();
diff --git a/core/modules/shortcut/src/Form/SetCustomize.php b/core/modules/shortcut/src/Form/SetCustomize.php
index 536828d..f1a23b6 100644
--- a/core/modules/shortcut/src/Form/SetCustomize.php
+++ b/core/modules/shortcut/src/Form/SetCustomize.php
@@ -52,7 +52,7 @@ public function form(array $form, FormStateInterface $form_state) {
     foreach ($this->entity->getShortcuts() as $shortcut) {
       $id = $shortcut->id();
       $form['shortcuts']['links'][$id]['#attributes']['class'][] = 'draggable';
-      $form['shortcuts']['links'][$id]['name']['#markup'] = l($shortcut->getTitle(), $shortcut->path->value);
+      $form['shortcuts']['links'][$id]['name']['#markup'] = \Drupal::l($shortcut->getTitle(), $shortcut->getRouteName(), $shortcut->getRouteParams());
       $form['shortcuts']['links'][$id]['#weight'] = $shortcut->getWeight();
       $form['shortcuts']['links'][$id]['weight'] = array(
         '#type' => 'weight',
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index b9c1b83..c8150ed 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -59,7 +59,7 @@ function system_requirements($phase) {
     $requirements['php'] = array(
       'title' => t('PHP'),
       // $phpversion is safe and output of l() is safe, so this value is safe.
-      'value' => SafeMarkup::set(($phase == 'runtime') ? $phpversion . ' (' . l(t('more information'), 'admin/reports/status/php') . ')' : $phpversion),
+      'value' => SafeMarkup::set(($phase == 'runtime') ? $phpversion . ' (' . \Drupal::l(t('more information'), 'system.php') . ')' : $phpversion),
     );
   }
   else {
