diff --git a/aleksis/core/assets/app.js b/aleksis/core/assets/app.js
index 00a146a41b096426e36328279729f58b5f77509d..2dc16b83968abbd8d4e494fb37067e34394caa21 100644
--- a/aleksis/core/assets/app.js
+++ b/aleksis/core/assets/app.js
@@ -45,11 +45,29 @@ const apolloProvider = new VueApollo({
   defaultClient: apolloClient,
 });
 
-
 const router = new VueRouter({
   mode: "history",
 });
 
+if (document.getElementById('sentry_settings') !== null) {
+  const Sentry = await import("@sentry/vue");
+  const { BrowserTracing } = await import("@sentry/tracing");
+
+  const sentry_settings = JSON.parse(document.getElementById('sentry_settings').textContent);
+  Sentry.init({
+    Vue,
+    dsn: sentry_settings.dsn,
+    environment: sentry_settings.environment,
+    tracesSampleRate: sentry_settings.traces_sample_rate,
+    logError: true,
+    integrations: [
+      new BrowserTracing({
+        routingInstrumentation: Sentry.vueRouterInstrumentation(router),
+      }),
+    ],
+  });
+}
+
 const app = new Vue({
   el: "#app",
   apolloProvider,
diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py
index 119325431a67baef0abe0f0d9cf923557e39b45b..c55a6bab03658d5f6707b3177d09bfb879eadd42 100644
--- a/aleksis/core/settings.py
+++ b/aleksis/core/settings.py
@@ -558,7 +558,7 @@ YARN_INSTALLED_APPS = [
     "paper-css@^0.4.1",
     "jquery-sortablejs@^1.0.1",
     "sortablejs@^1.15.0",
-    "@sentry/tracing@^6.19.6",
+    "@sentry/tracing@^7.28.0",
     "luxon@^2.3.2",
     "@iconify/iconify@^2.2.1",
     "@iconify/json@^2.1.30",
@@ -578,6 +578,7 @@ YARN_INSTALLED_APPS = [
     "@rollup/plugin-graphql@^2.0.2",
     "@rollup/plugin-virtual@^3.0.1",
     "vue-i18n@8",
+    "@sentry/vue@^7.28.0",
     "eslint@^8.26.0",
     "eslint-plugin-vue@^9.7.0",
     "eslint-config-prettier@^8.5.0",
diff --git a/aleksis/core/templates/core/vue_index.html b/aleksis/core/templates/core/vue_index.html
index 40eed2535a4a366ede6932f649998a53b05a4017..b8f07bb44bc5f2384a7ca01a643dffe5e7bcd340 100644
--- a/aleksis/core/templates/core/vue_index.html
+++ b/aleksis/core/templates/core/vue_index.html
@@ -14,16 +14,6 @@
       {% endif %}
       {% include_js "Sentry" %}
       {{ SENTRY_SETTINGS|json_script:"sentry_settings" }}
-      <script type="text/javascript">
-        const sentry_settings = JSON.parse(document.getElementById('sentry_settings').textContent);
-
-        Sentry.init({
-          dsn: sentry_settings.dsn,
-          environment: sentry_settings.environment,
-          tracesSampleRate: sentry_settings.traces_sample_rate,
-          integrations: [new Sentry.Integrations.BrowserTracing()]
-        });
-      </script>
     {% endif %}
 
     {% vite_hmr_client %}
diff --git a/aleksis/core/vite.config.js b/aleksis/core/vite.config.js
index 5f3ac056eece1b3d82a42f8ace6f68f50567063c..23057604063605d9eb8cf6a2db62832d93ea6e2b 100644
--- a/aleksis/core/vite.config.js
+++ b/aleksis/core/vite.config.js
@@ -29,6 +29,7 @@ export default defineConfig({
   build: {
     outDir: path.resolve("./vite_bundles/"),
     manifest: true,
+    target: ["firefox102", "chrome108", "safari16"],
     rollupOptions: {
       input: django_values.coreEntrypoint,
       output: {
@@ -40,6 +41,8 @@ export default defineConfig({
             return "apollo";
           } else if (id.includes("node_modules/graphql")) {
             return "graphql";
+          } else if (id.includes("node_modules/@sentry")) {
+            return "sentry";
           } else if (id.includes("node_modules")) {
             // Fallback for all other libraries
             return "vendor";