DEV Community

Cover image for Solved: “Sustainable user experience design best practices will often also improve performance and SEO.”
Darian Vance
Darian Vance

Posted on • Originally published at wp.me

Solved: “Sustainable user experience design best practices will often also improve performance and SEO.”

🚀 Executive Summary

TL;DR: A technical blog post details how a seemingly “sustainable” infinite scroll UX feature led to critical database overload, API latency, and SEO degradation due to unpredictable, non-cacheable queries. The solution involved emergency API rate-limiting followed by replacing infinite scroll with a “Load More” button, which restored system stability, enabled predictable caching, and significantly improved SEO discoverability.

🎯 Key Takeaways

  • Poorly implemented infinite scroll can cause severe backend strain, unpredictable database load, and API latency due to un-paginated, non-cacheable queries, leading to system instability.
  • Infinite scroll can be an “SEO Nightmare” as search engine crawlers often cannot discover content beyond the initial load, resulting in plummeting search rankings.
  • Replacing infinite scroll with a “Load More” button provides predictable, cacheable API calls, reduces origin load, and significantly improves SEO by allowing crawlers to discover paginated content.

Good user experience isn’t just about aesthetics; it’s a core technical principle that directly impacts system performance, stability, and search engine visibility. Sustainable UX practices create a virtuous cycle of happy users, healthy servers, and better SEO.

UX Isn’t Fluff: How a ‘Cool’ Feature Almost Melted Our Database

I remember the PagerDuty alert like it was yesterday. It was a Tuesday, right after the big ‘Odyssey’ release. CPU load on prod-db-01-replica was pinned at 99%, API latency was through the roof, and our public status page was turning a nasty shade of orange. For two hours, we were scrambling, thinking it was a DDoS attack or a botched data migration. It turned out to be the fancy new “infinite scroll” on the product listings page. It looked slick in the demo, but in production, it was a monster, sending thousands of un-paginated, non-cacheable queries per minute, and absolutely hammering our backend. The UX team designed a sports car, and the front-end team built it, but nobody ever checked if we had a road to drive it on.

The “Why”: The Chasm Between Design and Deployment

This happens all the time. There’s a fundamental disconnect between the teams that design user experiences and the teams that have to keep the infrastructure running. A designer’s goal is a “seamless” and “delightful” experience. An engineer’s goal is to ship the feature as spec’d. Our goal, in Ops and Architecture, is to maintain stability and performance. When these goals aren’t aligned, you get ‘sustainable’ UX on paper that’s completely unsustainable in reality.

In our case, “infinite scroll” translated to:

  • Unpredictable Load: We couldn’t predict or cache API calls because every user’s scroll depth was different.
  • Database Strain: Each scroll triggered a complex query with multiple joins, and with thousands of users doing it simultaneously, our read replica couldn’t keep up.
  • SEO Nightmare: Google’s crawlers couldn’t “scroll” to discover products beyond the initial load. From their perspective, we’d just deleted 90% of our catalog. Our rankings started to plummet within a day.

The root cause wasn’t a bad line of code; it was a bad process. A decision made in a design tool had a direct, catastrophic impact on metal and silicon.

The Fixes: From Firefighting to Fire Prevention

We got things stable, but you can’t just leave a ticking time bomb in the system. Here’s how we approached it, from the immediate band-aid to the long-term cultural shift.

1. The Quick Fix: The Rate-Limiting Hammer

During the incident, our first priority was to stop the bleeding. We couldn’t just roll back the entire release. So, we did the dirty but effective thing: we slapped an aggressive rate limit on the specific API endpoint being abused. Using our API gateway configuration, we limited it to something like 10 requests per user per minute. It was a hack, for sure. Users who scrolled too fast would see a “loading…” spinner that never resolved.

Warning: This is a temporary measure. It protects the backend at the expense of the user experience. You’re trading a server fire for a bunch of angry user support tickets, but that’s a trade I’ll make at 3 AM every time.

# A simplified Nginx config example for rate limiting
# This is the kind of thing you can apply in minutes.

limit_req_zone $binary_remote_addr zone=product_api:10m rate=10r/m;

server {
    ...
    location /api/v1/products {
        limit_req zone=product_api burst=5 nodelay;
        proxy_pass http://product_service;
    }
}
Enter fullscreen mode Exit fullscreen mode

2. The Permanent Fix: Sensible Pagination

The real fix wasn’t about throttling; it was about changing the interaction model. We had a sit-down with the UX and Frontend leads. We showed them the graphs—the CPU charts, the latency spikes, the drop in SEO crawl stats. Once they saw the data, the conversation changed from “but infinite scroll is modern” to “how do we fix this?”

We replaced the infinite scroll with a simple “Load More” button. This one change had three massive benefits:

  1. User Intent: The user explicitly asks for more data. No more fetching content they might never see.
  2. Predictable Caching: The “Load More” button simply requests page 2, then page 3, etc. These are distinct, cacheable API calls. We could now cache /api/products?page=2 at the CDN level, dramatically reducing origin load.
  3. SEO Friendly: We could add actual `

### 🤖 Frequently Asked Questions

#### ❓ How did the infinite scroll feature impact system performance and SEO?

The infinite scroll feature caused CPU load on prod-db-01-replica to pin at 99%, API latency to spike, and generated thousands of un-paginated, non-cacheable queries, hammering the backend. For SEO, Google’s crawlers couldn’t ‘scroll’ to discover products, leading to a drop in rankings.

#### ❓ How does the ‘Load More’ button compare to infinite scroll for performance and SEO?

The ‘Load More’ button offers superior performance by enabling predictable, cacheable API calls (e.g., /api/products?page=2), reducing origin load. For SEO, it’s friendly as crawlers can follow explicit pagination links, ensuring all content is discoverable, unlike poorly implemented infinite scroll which hides content.

#### ❓ What is a common implementation pitfall when introducing new UX features like infinite scroll, and how can it be avoided?

A common pitfall is a “fundamental disconnect between the teams that design user experiences and the teams that have to keep the infrastructure running.” This can be avoided by fostering cross-functional collaboration, involving operations and architecture teams early in the design process to validate technical feasibility and performance implications.


Darian Vance

👉 Read the original article on TechResolve.blog


Support my work

If this article helped you, you can buy me a coffee:

👉 https://buymeacoffee.com/darianvance

Top comments (0)