diff --git a/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp b/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp
index c6c7cc8ef2..51799ac714 100644
--- a/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp
+++ b/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp
@@ -389,8 +389,12 @@ void BrowsingContext::set_needs_display(CSSPixelRect const& rect)
void BrowsingContext::scroll_to(CSSPixelPoint position)
{
- if (active_document())
- active_document()->force_layout();
+ // NOTE: Scrolling to a position requires up-to-date layout *unless* we're scrolling to (0, 0)
+ // as (0, 0) is always guaranteed to be a valid scroll position.
+ if (!position.is_zero()) {
+ if (active_document())
+ active_document()->update_layout();
+ }
if (m_page)
m_page->client().page_did_request_scroll_to(position);
@@ -416,7 +420,7 @@ void BrowsingContext::scroll_to_anchor(DeprecatedString const& fragment)
if (!element)
return;
- document->force_layout();
+ document->update_layout();
if (!element->layout_node())
return;