diff --git a/src/renderer/html_handlebars/search.rs b/src/renderer/html_handlebars/search.rs
index ffa104b3..fe2edd5b 100644
--- a/src/renderer/html_handlebars/search.rs
+++ b/src/renderer/html_handlebars/search.rs
@@ -66,7 +66,13 @@ pub fn create_files(
if search_config.copy_js {
static_files.add_builtin(
"searchindex.js",
- format!("Object.assign(window.search, {});", index).as_bytes(),
+ // To reduce the size of the generated JSON by preventing all `"` characters to be
+ // escaped, we instead surround the string with much less common `'` character.
+ format!(
+ "window.search = JSON.parse('{}');",
+ index.replace("\\", "\\\\").replace("'", "\\'")
+ )
+ .as_bytes(),
);
static_files.add_builtin("searcher.js", searcher::JS);
static_files.add_builtin("mark.min.js", searcher::MARK_JS);