Index: src/views/partials/post-tile.ejs
===================================================================
--- src/views/partials/post-tile.ejs	(revision 7963a6e9c576b291e837823c55309d6bb470d2d9)
+++ src/views/partials/post-tile.ejs	(revision 9f81a0939fe58cdd4565e908750e31dd04697f9a)
@@ -8,14 +8,12 @@
 const _typeLabel = (post.type && post.type !== 'post') ? post.type : '';
 const _base = (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '';
-const _href = _base + '/' + post.slug;
+const _external = post.external_url || null;
+const _href = _external || (_base + '/' + post.slug);
+const _ext = !!_external;
 %>
 <a class="grid-tile<%= _hasCover ? '' : ' grid-tile-gradient' %><%= _isPinned ? ' is-pinned' : '' %>"
    href="<%= _href %>"
    <% if (_hasCover) { %>style="background-image: url('<%= post.cover_image_url %>'); --tile-hue: <%= _tileHue %>;"<% } else { %>style="--tile-hue: <%= _tileHue %>;"<% } %>
-   hx-get="<%= _href %>?partial=1"
-   hx-target="#pcms-main"
-   hx-swap="innerHTML"
-   hx-push-url="<%= _href %>"
-   hx-indicator="#pcms-loading">
+   <% if (_ext) { %>target="_blank" rel="noopener"<% } else { %>hx-get="<%= _href %>?partial=1" hx-target="#pcms-main" hx-swap="innerHTML" hx-push-url="<%= _href %>" hx-indicator="#pcms-loading"<% } %>>
 
   <% if (_typeLabel) { %>
