diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index c2d4603cb7d..39e27333666 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -2324,7 +2324,7 @@ static HRESULT translate_uri(HTMLOuterWindow *window, IUri *orig_uri, BSTR *ret_
hres = IDocHostUIHandler_TranslateUrl(window->doc_obj->hostui, 0, display_uri,
&translated_url);
- if(hres == S_OK) {
+ if(hres == S_OK && translated_url) {
TRACE("%08x %s -> %s\n", hres, debugstr_w(display_uri), debugstr_w(translated_url));
SysFreeString(display_uri);
hres = create_uri(translated_url, 0, &uri);
diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c
index 3b332d1db7c..33f4696d3e6 100644
--- a/dlls/mshtml/tests/htmldoc.c
+++ b/dlls/mshtml/tests/htmldoc.c
@@ -2614,6 +2614,12 @@ static HRESULT WINAPI DocHostUIHandler_TranslateUrl(IDocHostUIHandler2 *iface, D
ok(ppchURLOut != NULL, "ppchURLOut == NULL\n");
ok(!*ppchURLOut, "*ppchURLOut = %p\n", *ppchURLOut);
+ /* Not related to hash navigation, just return NULL and S_OK in some cases. */
+ if(loading_hash) {
+ *ppchURLOut = NULL;
+ return S_OK;
+ }
+
return S_FALSE;
}