diff --git a/layouts/_default/_markup/render-link.html b/layouts/_default/_markup/render-link.html
index 19e41295..dec0e3ff 100644
--- a/layouts/_default/_markup/render-link.html
+++ b/layouts/_default/_markup/render-link.html
@@ -1,9 +1,3 @@
-{{ $external := false }}
+{{ $target := partial "paige/target.html" (dict "page" .Page "url" .Destination) }}
-{{ if (urls.Parse .Destination).IsAbs }}
- {{ $external = not (strings.HasSuffix .Destination site.BaseURL) }}
-{{ end }}
-
-{{ $newtab := and $external site.Params.paige.external_link_new_tab }}
-
-{{ .Text }}
+{{ .Text }}
diff --git a/layouts/partials/paige/target.html b/layouts/partials/paige/target.html
new file mode 100644
index 00000000..eb10ed8d
--- /dev/null
+++ b/layouts/partials/paige/target.html
@@ -0,0 +1,8 @@
+{{ $params := . }}
+
+{{ $page := $params.page }}
+{{ $url := $params.url }}
+
+{{ $external := cond (urls.Parse $url).IsAbs (not (strings.HasSuffix $url site.BaseURL)) false }}
+
+{{ return cond (and $external ($page.Param "paige.external_link_new_tab" | not | not)) "_blank" "" }}
diff --git a/layouts/shortcodes/paige/icon.html b/layouts/shortcodes/paige/icon.html
index 99c59471..71feff16 100644
--- a/layouts/shortcodes/paige/icon.html
+++ b/layouts/shortcodes/paige/icon.html
@@ -2,13 +2,15 @@
{{ $title := .Get "title" }}
{{ $url := .Get "url" }}
+{{ $target := partial "paige/target.html" (dict "page" .Page "url" $url) }}
+
{{ if not $class }}
{{ errorf "layouts/shortcodes/paige/icon.html: no class" }}
{{ end }}
{{ with $url }}
-
+
{{ end }}
{{ with $title }}{{ . }}{{ end }}