diff --git a/frontend/src/metabase/admin/settings/components/widgets/PublicLinksListing.jsx b/frontend/src/metabase/admin/settings/components/widgets/PublicLinksListing.jsx
index 892ba549ca6aeb38110a651b9fa711153f6b7e2c..49f5dfc9e885c0c2b04a0cc467443bc1df27f61d 100644
--- a/frontend/src/metabase/admin/settings/components/widgets/PublicLinksListing.jsx
+++ b/frontend/src/metabase/admin/settings/components/widgets/PublicLinksListing.jsx
@@ -152,7 +152,7 @@ export const PublicLinksDashboardListing = () =>
         revoke={DashboardApi.deletePublicLink}
         type='Public Dashboard Listing'
         getUrl={({ id }) => Urls.dashboard(id)}
-        getPublicUrl={({ public_uuid }) => window.location.origin + Urls.publicDashboard(public_uuid)}
+        getPublicUrl={({ public_uuid }) => Urls.publicDashboard(public_uuid)}
         noLinksMessage="No dashboards have been publicly shared yet."
     />;
 
@@ -162,7 +162,7 @@ export const PublicLinksQuestionListing = () =>
         revoke={CardApi.deletePublicLink}
         type='Public Card Listing'
         getUrl={({ id }) => Urls.question(id)}
-        getPublicUrl={({ public_uuid }) => window.location.origin + Urls.publicCard(public_uuid)}
+        getPublicUrl={({ public_uuid }) => Urls.publicCard(public_uuid)}
         noLinksMessage="No questions have been publicly shared yet."
     />;
 
diff --git a/frontend/src/metabase/dashboard/containers/DashboardEmbedWidget.jsx b/frontend/src/metabase/dashboard/containers/DashboardEmbedWidget.jsx
index cd76a516159bb1b31fe14cd12ee93e2eaf917491..72dd16754d8024a047a8b6f72fb33fcfabac24c6 100644
--- a/frontend/src/metabase/dashboard/containers/DashboardEmbedWidget.jsx
+++ b/frontend/src/metabase/dashboard/containers/DashboardEmbedWidget.jsx
@@ -32,7 +32,7 @@ export default class DashboardEmbedWidget extends Component {
                 onDisablePublicLink={() => deletePublicLink(dashboard)}
                 onUpdateEnableEmbedding={(enableEmbedding) => updateEnableEmbedding(dashboard, enableEmbedding)}
                 onUpdateEmbeddingParams={(embeddingParams) => updateEmbeddingParams(dashboard, embeddingParams)}
-                getPublicUrl={({ public_uuid }) => window.location.origin + Urls.publicDashboard(public_uuid)}
+                getPublicUrl={({ public_uuid }) => Urls.publicDashboard(public_uuid)}
             />
         );
     }
diff --git a/frontend/src/metabase/lib/urls.js b/frontend/src/metabase/lib/urls.js
index 7c2eba73166aeef3535ac9f4ee9e9f3b995fba8d..8ea28ce358eb0bcc673c4260daf7844a286c1e93 100644
--- a/frontend/src/metabase/lib/urls.js
+++ b/frontend/src/metabase/lib/urls.js
@@ -1,4 +1,5 @@
 import { serializeCardForUrl } from "metabase/lib/card";
+import MetabaseSettings from "metabase/lib/settings"
 
 // provides functions for building urls to things we care about
 
@@ -59,11 +60,13 @@ export function label(label) {
 }
 
 export function publicCard(uuid, type = null) {
-    return `/public/question/${uuid}` + (type ? `.${type}` : ``);
+    const siteUrl = MetabaseSettings.get("site-url");
+    return `${siteUrl}/public/question/${uuid}` + (type ? `.${type}` : ``);
 }
 
 export function publicDashboard(uuid) {
-    return `/public/dashboard/${uuid}`;
+    const siteUrl = MetabaseSettings.get("site-url");
+    return `${siteUrl}/public/dashboard/${uuid}`;
 }
 
 export function embedCard(token, type = null) {
diff --git a/frontend/src/metabase/query_builder/containers/QuestionEmbedWidget.jsx b/frontend/src/metabase/query_builder/containers/QuestionEmbedWidget.jsx
index 5ad4562fd5611ea0d4e2b96a4bacbfec9eab98fe..fef991cbcf2153c3c5e09f6d35533b80d279a3d0 100644
--- a/frontend/src/metabase/query_builder/containers/QuestionEmbedWidget.jsx
+++ b/frontend/src/metabase/query_builder/containers/QuestionEmbedWidget.jsx
@@ -32,7 +32,7 @@ export default class QuestionEmbedWidget extends Component {
                 onDisablePublicLink={() => deletePublicLink(card)}
                 onUpdateEnableEmbedding={(enableEmbedding) => updateEnableEmbedding(card, enableEmbedding)}
                 onUpdateEmbeddingParams={(embeddingParams) => updateEmbeddingParams(card, embeddingParams)}
-                getPublicUrl={({ public_uuid }, extension) => window.location.origin + Urls.publicCard(public_uuid, extension)}
+                getPublicUrl={({ public_uuid }, extension) => Urls.publicCard(public_uuid, extension)}
                 extensions={["csv", "json"]}
             />
         );