diff --git a/web/src/lib/components/album-page/albums-list.svelte b/web/src/lib/components/album-page/albums-list.svelte
index befe2019a1..da036dd039 100644
--- a/web/src/lib/components/album-page/albums-list.svelte
+++ b/web/src/lib/components/album-page/albums-list.svelte
@@ -23,7 +23,6 @@
     locale,
     type AlbumViewSettings,
   } from '$lib/stores/preferences.store';
-  import { serverConfig } from '$lib/stores/server-config.store';
   import { user } from '$lib/stores/user.store';
   import { userInteraction } from '$lib/stores/user.svelte';
   import { makeSharedLinkUrl } from '$lib/utils';
@@ -367,9 +366,8 @@
         const sharedLink = await modalManager.show(SharedLinkCreateModal, { albumId: albumToShare.id });
 
         if (sharedLink) {
-          const url = makeSharedLinkUrl($serverConfig.externalDomain, sharedLink.key);
           handleSharedLinkCreated(albumToShare);
-          await modalManager.show(QrCodeModal, { title: $t('view_link'), value: url });
+          await modalManager.show(QrCodeModal, { title: $t('view_link'), value: makeSharedLinkUrl(sharedLink.key) });
         }
         return;
       }
diff --git a/web/src/lib/components/asset-viewer/actions/share-action.svelte b/web/src/lib/components/asset-viewer/actions/share-action.svelte
index f32d3e7515..7e2ffa1b94 100644
--- a/web/src/lib/components/asset-viewer/actions/share-action.svelte
+++ b/web/src/lib/components/asset-viewer/actions/share-action.svelte
@@ -3,7 +3,6 @@
   import { modalManager } from '$lib/managers/modal-manager.svelte';
   import QrCodeModal from '$lib/modals/QrCodeModal.svelte';
   import SharedLinkCreateModal from '$lib/modals/SharedLinkCreateModal.svelte';
-  import { serverConfig } from '$lib/stores/server-config.store';
   import { makeSharedLinkUrl } from '$lib/utils';
   import type { AssetResponseDto } from '@immich/sdk';
   import { mdiShareVariantOutline } from '@mdi/js';
@@ -19,8 +18,7 @@
     const sharedLink = await modalManager.show(SharedLinkCreateModal, { assetIds: [asset.id] });
 
     if (sharedLink) {
-      const url = makeSharedLinkUrl($serverConfig.externalDomain, sharedLink.key);
-      await modalManager.show(QrCodeModal, { title: $t('view_link'), value: url });
+      await modalManager.show(QrCodeModal, { title: $t('view_link'), value: makeSharedLinkUrl(sharedLink.key) });
     }
   };
 </script>
diff --git a/web/src/lib/components/photos-page/actions/create-shared-link.svelte b/web/src/lib/components/photos-page/actions/create-shared-link.svelte
index 05baf822c1..65a389cd0a 100644
--- a/web/src/lib/components/photos-page/actions/create-shared-link.svelte
+++ b/web/src/lib/components/photos-page/actions/create-shared-link.svelte
@@ -4,7 +4,6 @@
   import { modalManager } from '$lib/managers/modal-manager.svelte';
   import QrCodeModal from '$lib/modals/QrCodeModal.svelte';
   import SharedLinkCreateModal from '$lib/modals/SharedLinkCreateModal.svelte';
-  import { serverConfig } from '$lib/stores/server-config.store';
   import { makeSharedLinkUrl } from '$lib/utils';
   import { mdiShareVariantOutline } from '@mdi/js';
   import { t } from 'svelte-i18n';
@@ -17,8 +16,7 @@
     });
 
     if (sharedLink) {
-      const url = makeSharedLinkUrl($serverConfig.externalDomain, sharedLink.key);
-      await modalManager.show(QrCodeModal, { title: $t('view_link'), value: url });
+      await modalManager.show(QrCodeModal, { title: $t('view_link'), value: makeSharedLinkUrl(sharedLink.key) });
     }
   };
 </script>
diff --git a/web/src/lib/components/sharedlinks-page/actions/shared-link-copy.svelte b/web/src/lib/components/sharedlinks-page/actions/shared-link-copy.svelte
index 9ec9fc76ce..7edf305a56 100644
--- a/web/src/lib/components/sharedlinks-page/actions/shared-link-copy.svelte
+++ b/web/src/lib/components/sharedlinks-page/actions/shared-link-copy.svelte
@@ -1,7 +1,6 @@
 <script lang="ts">
   import CircleIconButton from '$lib/components/elements/buttons/circle-icon-button.svelte';
   import MenuOption from '$lib/components/shared-components/context-menu/menu-option.svelte';
-  import { serverConfig } from '$lib/stores/server-config.store';
   import { copyToClipboard, makeSharedLinkUrl } from '$lib/utils';
   import type { SharedLinkResponseDto } from '@immich/sdk';
   import { mdiContentCopy } from '@mdi/js';
@@ -15,7 +14,7 @@
   let { link, menuItem = false }: Props = $props();
 
   const handleCopy = async () => {
-    await copyToClipboard(makeSharedLinkUrl($serverConfig.externalDomain, link.key));
+    await copyToClipboard(makeSharedLinkUrl(link.key));
   };
 </script>
 
diff --git a/web/src/lib/modals/AlbumShareModal.svelte b/web/src/lib/modals/AlbumShareModal.svelte
index 56e9a92305..17279a8e6a 100644
--- a/web/src/lib/modals/AlbumShareModal.svelte
+++ b/web/src/lib/modals/AlbumShareModal.svelte
@@ -5,7 +5,6 @@
   import FullScreenModal from '$lib/components/shared-components/full-screen-modal.svelte';
   import { AppRoute } from '$lib/constants';
   import QrCodeModal from '$lib/modals/QrCodeModal.svelte';
-  import { serverConfig } from '$lib/stores/server-config.store';
   import { makeSharedLinkUrl } from '$lib/utils';
   import {
     AlbumUserRole,
@@ -34,7 +33,7 @@
 
   let sharedLinkUrl = $state('');
   const handleViewQrCode = (sharedLink: SharedLinkResponseDto) => {
-    sharedLinkUrl = makeSharedLinkUrl($serverConfig.externalDomain, sharedLink.key);
+    sharedLinkUrl = makeSharedLinkUrl(sharedLink.key);
   };
 
   const roleOptions: Array<{ title: string; value: AlbumUserRole | 'none'; icon?: string }> = [
diff --git a/web/src/lib/utils.ts b/web/src/lib/utils.ts
index b7466b5812..645c485cc5 100644
--- a/web/src/lib/utils.ts
+++ b/web/src/lib/utils.ts
@@ -2,6 +2,7 @@ import { NotificationType, notificationController } from '$lib/components/shared
 import { defaultLang, langs, locales } from '$lib/constants';
 import { authManager } from '$lib/managers/auth-manager.svelte';
 import { lang } from '$lib/stores/preferences.store';
+import { serverConfig } from '$lib/stores/server-config.store';
 import { handleError } from '$lib/utils/handle-error';
 import {
   AssetJobName,
@@ -256,8 +257,8 @@ export const copyToClipboard = async (secret: string) => {
   }
 };
 
-export const makeSharedLinkUrl = (externalDomain: string, key: string) => {
-  return new URL(`share/${key}`, externalDomain || globalThis.location.origin).href;
+export const makeSharedLinkUrl = (key: string) => {
+  return new URL(`share/${key}`, get(serverConfig).externalDomain || globalThis.location.origin).href;
 };
 
 export const oauth = {
diff --git a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte
index 2331ae01b1..88840b382d 100644
--- a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte
+++ b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte
@@ -42,7 +42,6 @@
   import { AssetInteraction } from '$lib/stores/asset-interaction.svelte';
   import { assetViewingStore } from '$lib/stores/asset-viewing.store';
   import { AssetStore } from '$lib/stores/assets-store.svelte';
-  import { serverConfig } from '$lib/stores/server-config.store';
   import { SlideshowNavigation, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store';
   import { preferences, user } from '$lib/stores/user.store';
   import { handlePromiseError, makeSharedLinkUrl } from '$lib/utils';
@@ -439,8 +438,7 @@
     const sharedLink = await modalManager.show(SharedLinkCreateModal, { albumId: album.id });
 
     if (sharedLink) {
-      const url = makeSharedLinkUrl($serverConfig.externalDomain, sharedLink.key);
-      await modalManager.show(QrCodeModal, { title: $t('view_link'), value: url });
+      await modalManager.show(QrCodeModal, { title: $t('view_link'), value: makeSharedLinkUrl(sharedLink.key) });
     }
   };
 </script>