QuintoAndar konnte durch die Verbesserung der Seitenleistung die Conversion-Raten und die Anzahl der Seiten pro Sitzung steigern.

Ein Projekt zur Optimierung von Core Web Vitals und der Migration zu Next.js führte zu einer Steigerung der Conversion-Raten um 5% und einer Steigerung der Seiten pro Sitzung um 87 %.

Daniela Sayuri Yassuda
Daniela Sayuri Yassuda

QuintoAndar ist ein brasilianisches Proptech-Unternehmen, dessen Produkte digitale End-to-End-Lösungen für Immobilien anbieten. In diesem Jahr haben wir ein Projekt durchgeführt, das darauf abzielt, die Leistung eines Content Hubs in unserer App zu verbessern, und erzielten ermutigende Ergebnisse bei der Steigerung der Nutzerzugriffe und der Conversion-Messwerte.

46%

niedrigere Absprungrate

87%

mehr Seiten pro Sitzung

%

höhere Conversion-Raten während der Validierungsphase

Herausforderungen

Unsere App verfügt über einen Content Hub für Eigentumswohnungen mit über 40.000 Seiten, auf dem Nutzer Informationen zu ihren Immobilien abrufen, Fotos der Gemeinschaftsräume ansehen, sich über das Viertel informieren und Immobilien zur Miete oder zum Verkauf finden können. Diese Seiten sind für QuintoAndar sehr wichtig:

  • Sie sind eine wichtige Quelle organischen Traffics, da immer mehr Nutzer über Suchergebnisse auf sie gelangen.
  • Im Vergleich zu anderen Seiten weisen sie mittel- und langfristig hohe Conversion-Raten auf.

Es gab jedoch auch Herausforderungen hinsichtlich der Leistung und Nutzererfahrung auf diesen Seiten:

  • Die mit den Core Web Vitals gemessene Leistung war nicht optimiert und es gab bekannte Probleme in Bezug auf langsames Laden von Seiten, langsame Reaktionsfähigkeit auf Nutzereingaben und Layout-Instabilität.
  • Die Absprungraten waren hoch, auch wenn wir erwartet hatten, dass sie höher ausfallen als in anderen Bereichen der App.
  • Das Update zur Nutzerfreundlichkeit von Seiten in der Google Suche, das zu diesem Zeitpunkt noch nicht veröffentlicht wurde, würde Core Web Vitals in den Ranking-Algorithmus aufnehmen. Dadurch könnte sich die Seitenleistung auf die Darstellung der Suchergebnisse auswirken.

Gleichzeitig haben wir einige Möglichkeiten der Entwicklererfahrung identifiziert, die in anderen Projekten des gesamten Unternehmens zu Gewinnen führen könnten:

  • Unsere serverseitige Rendering-Logik, die alle Seiten mit hohen Zugriffszahlen rendert, einschließlich der Seiten mit Eigentumswohnungen, wurde intern erstellt und war zu komplex, um Neueinstellungen zu verwalten und einzustellen.
  • Wesentliche Funktionen zur Erzielung einer guten App-Leistung, z. B. Code-Aufteilung, erforderten außerdem eine benutzerdefinierte Einrichtung sowie manuelle Arbeit von den Entwicklern.
  • QuintoAndar verfügt über mehr als 30 React-Webanwendungen. Es ist eine mühsame Aufgabe, diese Anwendungen zu aktualisieren und gemäß den Best Practices zu warten.

Vorgehensweise

Wir haben ein Projekt zur Leistungsoptimierung für den Content Hub für Eigentumswohnungen gestartet, um die Nutzererfahrung zu verbessern, da diese Verbesserungen zu mehr Conversions, einer besseren SEO und einer besseren Nutzerfreundlichkeit führen können. Diese Initiative war auch eine gute Gelegenheit, die Entwicklererfahrung zu verbessern.

Zu Next.js migrieren

Die neue Version der Seite mit Eigentumswohnungen wurde mit Next.js implementiert. Der Content Hub für Eigentumswohnungen ist weitgehend unabhängig von anderen Teilen der App und schien ein guter Kandidat, um ein neues Framework auszuprobieren. Wir könnten das Ausmaß der Migrationsmaßnahmen besser nachvollziehen und bewerten, wie die Funktionen dieser App helfen könnten, ohne die anderen React-Apps in QuintoAndar zu beeinträchtigen.

Eine harte Anforderung bestand darin, sicherzustellen, dass die Seiten von Suchmaschinen gecrawlt werden können. Next.js erfüllt diese Anforderung durch die standardmäßige Unterstützung des serverseitigen Renderings und macht eine benutzerdefinierte Einrichtung überflüssig. Die Dokumentation macht es einfacher, Wissen über Aufgaben wie das Datenabruf auf dem Server zu teilen und neue Entwickler zu gewinnen. Durch serverseitiges Rendering werden auch Leistungsmesswerte wie First Contentful Paint (FCP) verbessert.

Das Framework bietet weitere leistungsfreundliche Funktionen wie die automatische Codeaufteilung und den Prefetch. Obwohl die bestehende Struktur diese Funktionen bereits bot, wurde die Akzeptanz durch den zusätzlichen Arbeitsaufwand der Entwickler erschwert. Beispielsweise musste die Codeaufteilung auf Seiten- oder Komponentenebene manuell erfolgen.

JavaScript-Ressourcen optimieren

Zuerst wurde nicht verwendeter Code entfernt. Wir haben uns die Webpack Bundle Analyzer-Berichte angesehen, in denen der Inhalt jedes JS-Bundles angezeigt wird, und alle Drittanbieter-Skripts sorgfältig geprüft. Daher konnten wir einige Tracking-Bibliotheken entfernen, die auf dieser Seite nicht verwendet wurden.

Unser Team ging noch einen Schritt weiter und bewertete die Leistungskosten vorhandener Funktionen. Die Schaltfläche „Gefällt mir“ beispielsweise erforderte recht viel JS-Code, um zu funktionieren. Auf der Seite mit den Eigentumswohnungen haben jedoch weniger als 0,5% der Nutzer mit der Schaltfläche interagiert, die verfügbar und häufiger in anderen Teilen unserer App verwendet wird. Nach einer Diskussion sowohl über die Technik als auch für das Produkt haben wir uns entschieden, diese Funktion zu entfernen.

Eine Animation, die die Schaltfläche „Gefällt mir“ zeigt. Es gibt eine Karte zu einem vermieteten Apartment. In der unteren rechten Ecke der Karte befindet sich eine graue herzförmige Schaltfläche, die beim Anklicken blau wird.

Andere JS-Optimierungen wurden bereits implementiert, z. B. die statische Komprimierung mit Brotli, die bei der Build-Erstellung mit BrotliWebpackPlugin durchgeführt wurde und auch auf andere Arten statischer Ressourcen angewendet wurde. Zuerst verwendeten wir die vom CDN bereitgestellte Komprimierung, woraufhin Brotli die Größe von JS im Vergleich zu gzip um 18% reduzierte. Doch wir stellten bei der Build-Erstellung auf die Brotli-Komprimierung um und konnten damit eine Reduzierung um 24% erreichen.

Bildressourcen optimieren

In der mobilen Version nimmt ein Hero-Image den Großteil des Bereichs „above the fold“ ein. Außerdem ist es der Largest Contentful Paint (LCP) der Seite.

Die Seite mit den Eigentumswohnungen von Edifício Copan (São Paulo, Brasilien) Ein von Bodenhöhe aufgenommenes Foto zeigt die Rundungen des Gebäudes.
Das Hero-Image einer Seite mit Eigentumswohnungen.

Bisher hatten alle Bilder bereits die Attribute srcset und sizes, um responsive Bilder auszuliefern. Außerdem haben wir Thumbor verwendet, um die Größe von Bildern bei Bedarf anzupassen, und unser CDN so konfiguriert, dass sie effizient im Cache gespeichert werden.

Moderne Mobilgeräte haben Displays mit einer sehr hohen Pixeldichte, d. h. der Browser rendert 3- oder 4-fache Versionen des Bildes, sofern verfügbar. Je höher die Auflösung, desto schwieriger wird es für das menschliche Auge, die Unterschiede wahrzunehmen, aber die Dateigrößen werden trotzdem zunehmen. Durch Begrenzung der maximalen Bildauflösung wurde die Bildgröße verbessert, ohne die Nutzererfahrung zu beeinträchtigen. Wir haben das Hero-Image auf maximal die 2-fache Version beschränkt, die etwa 35% kleiner als die 3-fache und 50% kleiner als die 4-fach-Version ist.

Zum Abschluss haben wir eine Strategie für das Vorabladen verwendet, um die Daten so schnell wie möglich herunterzuladen und anzuzeigen, und freuen uns darauf, den LCP-Messwert zu verbessern.

<link rel="preload" href="/img/450x450/892847321-143.0038687080606IMG20180420WA0037.jpg" as="image">

Die integrierte Bildkomponente von Next.js umfasst viele dieser Optimierungen, z. B. responsive Größenanpassung und priorisiertes Laden. Während dieses Projekts haben wir die vorhandenen Bilder nicht zur Verwendung dieser Komponente migriert, aber wir planen, sie in neue Funktionen einzuführen.

Layout Shift wird reduziert

Auf der Seite mit den Wohnungen gab es einige Probleme mit Cumulative Layout Shift (CLS). Die für die Layoutverschiebungen verantwortlichen Elemente wurden nur im Client gerendert, z. B. das serverseitige Markup mit clientseitig gerenderten Komponenten oder Bilder ohne definierte width- und height-Attribute.

Um diese Probleme zu lösen, legen wir nach Möglichkeit genaue Abmessungen für diese Elemente oder geschätzte Werte mit min-height fest. Es gibt weitere Optionen, z. B. die Verwendung der CSS-Property aspect-ratio. Außerdem haben wir Platzhalter erstellt, um zu verhindern, dass dynamisch gerenderte Komponenten Layoutverschiebungen verursachen.

Ein Bild eines Stadtgebiets in Google Maps mit einer roten Markierung in der Mitte.
Durch das Definieren von Abmessungen für Elemente wie das Kartenbild wurde die CLS reduziert.

Änderungen schrittweise einführen

Unser Team wollte überprüfen, ob die optimierte Version der Condominium-Hub-Seite die Nutzerfreundlichkeit verbessern würde. Um dies zu erreichen, haben wir eine gestaffelte Rollout-Strategie gewählt:

  1. In der ersten Phase wurde die neue Version für ein paar ausgewählte URLs veröffentlicht, sodass sie täglich nur von wenigen Hundert Nutzern gesehen wurde.
  2. In der zweiten Phase wurden mehrere tausend Nutzer pro Tag veröffentlicht.
  3. In der dritten und letzten Phase wurde sie für alle Seiten veröffentlicht und die Einführung für alle Nutzer abgeschlossen.

Während dieses Zeitraums hat das Entwicklerteam kontinuierlich die Seitenleistung in der Produktion gemessen und kontinuierlich an Verbesserungen gearbeitet. Außerdem verglich das Team die Geschäftsmetriken der neuen und der vorherigen Version. Die Ergebnisse in diesem Überprüfungszeitraum waren vielversprechend.

Ergebnisse

Das Team führte mithilfe von SpeedCurve kontinuierlich Lab-Tests an der Seite mit den Eigentumswohnungen durch. Dies sind die Ergebnisse für die mobile Version:

Lab-Messwert Vorher Nachher Differenz
Largest Contentful Paint (LCP) 2,41 Sekunden 1,48 Sekunden -39%
Zeit bis Interaktivität (Time to Interactive, TTI) 12,16 Sekunden 7,48 Sekunden -39%
Total Blocking Time (TBT) 1.124 Millisekunden 1.056 Millisekunden -4 %
Cumulative Layout Shift (CLS) 0,0402 0.0093 -77%
Mit SpeedCurve erfasste Labmesswert-Ergebnisse.

Wir wollten auch die Auswirkungen auf unsere echten Nutzer prüfen. Mit Felddaten, die mit dem Instana Website Monitoring erhoben wurden, haben wir uns den einmonatigen Zeitraum vor und nach der Einführung angesehen. Beim Vergleich des 75. Perzentils für mobile Nutzer hat sich gezeigt, dass der LCP um 26 % und der FID-Wert um 72 % gesunken sind.

Ein Liniendiagramm mit LCP-Werten, in dem die neue und die vorherige Version des aktuellen und des letzten Monats verglichen werden Die Kurve für die neue Version bewegt sich zwischen 2 und 4 Sekunden und bleibt die meiste Zeit unter der Kurve der vorherigen Version.
Ein Liniendiagramm mit FID-Werten, in dem die neue und vorherige Version des aktuellen und des letzten Monats verglichen werden Die Kurve für die neue Version bleibt die meiste Zeit unter 100 ms, während in der Kurve für die vorherige Version einige Spitzen über 250 ms auftreten.
Mit Instana erfasste Ergebnisse von Feldmesswerten.

PageSpeed Insights bietet einen Bericht mit Felddaten für die letzten 28 Tage. Allein die Seite mit den meisten Aufrufen hatte genügend Daten, um einen Bericht für mobile Nutzer zu erstellen. Seit November 2021 wurden alle Core Web Vitals der Kategorie „Gut“ zugeordnet.

Screenshot des PageSpeed Insights-Berichts mit dem Bereich „Felddaten“ Alle Core Web Vitals-Messwerte (FCP, FID, LCP, CLS) befinden sich in der entsprechenden Gruppe.
PageSpeed Insights zeigt, dass Nutzer von Mobilgeräten auf der Seite mit den meisten Zugriffen eine positive Nutzererfahrung haben.

Bei der schrittweisen Einführung sind die Absprungraten zurückgegangen. Als wir die Einführung für alle Seiten abgeschlossen hatten, verzeichneten wir in Google Analytics einen Rückgang der Absprungrate um 46 %, einen Anstieg der Seiten pro Sitzung um 87% und eine Steigerung der durchschnittlichen Sitzungsdauer um 49 %. Bei der bezahlten Suche sank die Absprungrate sogar um 59 % – ein positives Zeichen für Investitionen in Pay-per-Click-Anzeigen (PPC).

Screenshot einer Grafik aus Google Analytics Dabei werden die Absprungraten zweier unterschiedlicher Zeiträume im März 2021 verglichen. Seit dem 17. März sinkt die Absprungrate leicht ab. Der Rückgang ist am 24. März verstärkt.
In Google Analytics wird angezeigt, dass die Absprungrate sinkt, da wir die neue Version auf weiteren Seiten eingeführt haben.

Im Hinblick auf die Auswirkungen der Geschäftsmesswerte haben wir die Conversion-Raten für Transaktionen wie das Planen einer Besichtigung und die Beantragung der Miete oder den Kauf einer Immobilie analysiert. Während die Verbesserungen noch durchgeführt wurden, hat unser Team die Konvertierung zwischen der vorherigen und der neuen Version verglichen. In derselben Woche verzeichnete die Gruppe der Seiten mit der neuen Version einen Anstieg der Conversions um 5 %, während auf den anderen Seiten bei demselben Messwert ein leichter Rückgang zu verzeichnen war.

Zwei Liniendiagramme nebeneinander, in denen jeweils die Conversion der aktuellen und der vorherigen Woche verglichen wird. Die linke Kurve steht für die vorherige Version der Seite und zeigt, dass die Conversion-Kurve für die aktuelle Woche etwas unter der für die vorherige Woche liegt. Das richtige ist für die neue Version und die Conversion-Kurve für die aktuelle Woche liegt etwas über der für die vorherige Woche.
In derselben Woche stieg die Conversion-Rate für die neue Version an, während die vorherige Version etwas zurückging.

Fazit

Dieses Projekt ist der erste Teil einer langfristigen Migration von React ohne Framework zu Next.js. Die Teams, die seitdem an der Seite mit Eigentumswohnungen gearbeitet haben, gaben positives Feedback zur verbesserten Entwicklererfahrung. Andere Teams, die für neue Webanwendungen Bootstrapping durchführen mussten, haben dies bereits mit Next.js getan. Wir sind davon überzeugt, dass Next.js die Wartung vereinfachen und eine Gemeinsamkeit zwischen verschiedenen Apps schaffen wird.

Insgesamt wächst der Content Hub für Eigentumswohnungen in Bezug auf die absolute Zahl der Nutzer und Transaktionen kontinuierlich. Laut Langzeitanalyse tragen viele Faktoren dazu bei, wie die Ausweitung der Geschäftstätigkeit von QuintoAndar und SEO-Initiativen wie eine verbesserte Seitenindexierung. Bei diesem Projekt haben wir festgestellt, dass auch die Seitenleistung einer dieser Faktoren mit großem Potenzial für eine positive Auswirkung auf Conversions ist.

Unser besonderer Dank gilt Pedro Carmo, Product Manager des SEO-Teams, der sich die Nutzerdaten genau angesehen und die Conversion-Analyse aus dieser Fallstudie erstellt hat.