diff --git a/Tests/LibWeb/Text/expected/URL/search-params-with-invalid-utf8.txt b/Tests/LibWeb/Text/expected/URL/search-params-with-invalid-utf8.txt
new file mode 100644
index 00000000000..30749baeee3
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/URL/search-params-with-invalid-utf8.txt
@@ -0,0 +1,2 @@
+key equals = true
+value equals = true
diff --git a/Tests/LibWeb/Text/input/URL/search-params-with-invalid-utf8.html b/Tests/LibWeb/Text/input/URL/search-params-with-invalid-utf8.html
new file mode 100644
index 00000000000..4438a6c850c
--- /dev/null
+++ b/Tests/LibWeb/Text/input/URL/search-params-with-invalid-utf8.html
@@ -0,0 +1,10 @@
+
+
diff --git a/Userland/Libraries/LibWeb/DOMURL/URLSearchParams.cpp b/Userland/Libraries/LibWeb/DOMURL/URLSearchParams.cpp
index b84347f7c85..cb8452b882d 100644
--- a/Userland/Libraries/LibWeb/DOMURL/URLSearchParams.cpp
+++ b/Userland/Libraries/LibWeb/DOMURL/URLSearchParams.cpp
@@ -115,8 +115,8 @@ ErrorOr> url_decode(StringView input)
auto space_decoded_name = name.replace("+"sv, " "sv, ReplaceMode::All);
// 5. Let nameString and valueString be the result of running UTF-8 decode without BOM on the percent-decoding of name and value, respectively.
- auto name_string = TRY(String::from_byte_string(URL::percent_decode(space_decoded_name)));
- auto value_string = TRY(String::from_byte_string(URL::percent_decode(value)));
+ auto name_string = String::from_utf8_with_replacement_character(URL::percent_decode(space_decoded_name));
+ auto value_string = String::from_utf8_with_replacement_character(URL::percent_decode(value));
TRY(output.try_empend(move(name_string), move(value_string)));
}