diff --git a/apps/web-app/scripts/prerender-routes.js b/apps/web-app/scripts/prerender-routes.js
index 957f06b9..d66d30d3 100644
--- a/apps/web-app/scripts/prerender-routes.js
+++ b/apps/web-app/scripts/prerender-routes.js
@@ -72,7 +72,48 @@ function escapeHtml(value) {
}
function escapeScriptJson(value) {
- return String(value).replace(/<\/script/gi, '<\\/script');
+ return String(value)
+ .replaceAll('<', '\\u003c')
+ .replaceAll('>', '\\u003e')
+ .replaceAll('&', '\\u0026')
+ .replaceAll('\u2028', '\\u2028')
+ .replaceAll('\u2029', '\\u2029');
+}
+
+function removeExistingJsonLdScripts(html) {
+ const marker = 'data-seo-jsonld="true"';
+ let remaining = html;
+ let lowered = html.toLowerCase();
+
+ while (true) {
+ const markerIndex = lowered.indexOf(marker);
+ if (markerIndex === -1) {
+ return remaining;
+ }
+
+ const openTagStart = lowered.lastIndexOf('', closeTagStart + 8);
+ if (closeTagEnd === -1) {
+ return remaining;
+ }
+
+ remaining = `${remaining.slice(0, openTagStart)}${remaining.slice(closeTagEnd + 1)}`;
+ lowered = remaining.toLowerCase();
+ }
}
function replaceHtmlTag(html, pattern, replacement, insertionPoint) {
@@ -103,7 +144,7 @@ function setTitleTag(html, title) {
}
function setJsonLdTag(html, payload) {
- const cleaned = html.replace(/`;
return cleaned.replace('', `\n${tag}\n`);
}