diff --git a/core/modules/views/src/Plugin/views/row/RssFields.php b/core/modules/views/src/Plugin/views/row/RssFields.php
index 9a31a028f0..8222b5ae6f 100644
--- a/core/modules/views/src/Plugin/views/row/RssFields.php
+++ b/core/modules/views/src/Plugin/views/row/RssFields.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
+use Drupal\Component\Utility\UrlHelper;
 
 /**
  * Renders an RSS item based on fields.
@@ -141,7 +142,13 @@ public function render($row) {
     $item->title = $this->getField($row_index, $this->options['title_field']);
     // @todo Views should expect and store a leading /. See:
     //   https://www.drupal.org/node/2423913
-    $item->link = Url::fromUserInput('/' . $this->getField($row_index, $this->options['link_field']))->setAbsolute()->toString();
+    // If internal link, get absolute URL from URI.
+    if (!UrlHelper::isExternal($this->getField($row_index, $this->options['link_field']))) {
+    $item->link = $this->getAbsoluteUrl($this->getField($row_index, $this->options['link_field']));
+    }
+    else {
+      $item->link = Url::fromUri($this->getField($row_index, $this->options['link_field']))->setAbsolute()->toString();
+    }
 
     $field = $this->getField($row_index, $this->options['description_field']);
     $item->description = is_array($field) ? $field : ['#markup' => $field];
@@ -207,4 +214,22 @@ public function getField($index, $field_id) {
     return $this->view->style_plugin->getField($index, $field_id);
   }
 
+  /**
+   * Convert a rendered URL string to an absolute URL.
+   *
+   * @param string $url_string
+   *   The rendered field value ready for display in a normal view.
+   *
+   * @return string
+   *   A string with an absolute URL.
+   */
+  protected function getAbsoluteUrl($url_string) {
+    $host = \Drupal::request()->getSchemeAndHttpHost();
+
+    // @todo Views should expect and store a leading /.
+    // @see https://www.drupal.org/node/2423913
+    return $host . '/' . ltrim($url_string, '/');
+  }
+
+
 }
