Skip to content
SoyGarfield
Research #09

How I verified prerendering actually works in production: the Alem Automotores case

How do you tell, from the outside, working prerendering apart from broken prerendering, with no access to the code?

By Pietro Fiorillo ·

In this article
Live-verified checklist on an Audi A3's page: unique title, own canonical pointing to its URL, real Product and Offer JSON-LD with a price in dollars, and the vehicle's own Open Graph image.
Unlike another project in the same category, per-route prerendering actually works here. Verified with curl, no repository access. Original diagram.

Why I reviewed this project after finding a problem on a similar one

After verifying that AV Automotores' per-route prerendering wasn't working in production, I wanted to check a project of the same type (a React SPA with Firestore, vehicle catalog) to confirm whether the problem was with the architecture pattern in general or specific to that case.

What I found: a real vehicle page, not a generic shell

I requested the URL of a 2010 Audi A3 listed in the site's public sitemap with curl -sL. Unlike what I found at AV Automotores, the response had a <title> specific to the vehicle (year and price included), a <link rel="canonical"> pointing to that same URL, and a real <script type="application/ld+json"> block.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Audi A3 2010",
  "brand": { "@type": "Brand", "name": "Audi" },
  "offers": {
    "@type": "Offer",
    "priceCurrency": "USD",
    "price": 8800,
    "availability": "https://schema.org/InStock"
  }
}
Real (trimmed) JSON-LD returned in the HTML of /catalogo/audi-a3, verified with curl on October 18, 2026.

One thing worth being precise about: Schema.org has a more specific Vehicle type than Product, and this project's original documentation mentioned «schema markup for organization, breadcrumbs and reviews» without specifying which. What I found on this page is Product with Offer and Brand, which Google reads correctly for price and availability, even though it's not the most specific type possible. I'd rather correct this imprecision here than leave it.

A real detail that could explain a slower-than-expected LCP

This project's catalog is smaller than other similar ones (31 URLs in the sitemap, against 171 for another project in the same category), so I expected a higher Lighthouse score. That wasn't the case: 45 out of 100 on mobile, with a 12.5 second LCP.

Reviewing the HTML, I found that vehicle image URLs have unencoded spaces: https://automotoresalem877.com/vehicles/autos/Audi A3 2010/1.png, instead of %20 in place of the spaces. I can't confirm this is the main cause of the LCP without deep browser profiling, but it's a real, observable technical detail, not baseless speculation.

Measurable results

Real metrics measured on October 18, 2026.
MetricResultEnvironment / evidence
Lighthouse Performance (mobile, lab)45 / 100Lighthouse 13.5.0, simulated throttling
LCP (lab)12.5 sSame Lighthouse run, not field (CrUX) data
URLs in the sitemap31Public sitemap.xml, confirmed with curl
Title and canonical per vehicleConfirmed, unique per routeVerified on the 2010 Audi A3 page

The difference between a pattern that works and one that doesn't is often not the architecture chosen, it's whether someone verified it kept running.

Pietro Fiorillo

My part in this project

My part in Alem Automotores included migrating the catalog to Firestore, the admin panel and the site's technical SEO, as part of my work at MANYA Digital.

What I'd do differently: a pending precision about the schema type

This project's original description didn't specify the exact Schema.org type used. I've already updated it to reflect what I confirmed in production: Product, Offer and Brand, not Vehicle. It's a minor correction compared to others in this series, but the same rule applies: if I can verify it, I make it precise.

What I'd test next

If I had repository access, I'd properly encode the image URLs (replacing spaces with %20) as a first step before looking for more complex causes of the slow LCP, and I'd evaluate whether it's worth migrating the JSON-LD from Product to Vehicle to be more specific.

Sources

Frequently asked questions

Why does the JSON-LD use Product instead of Vehicle?

Schema.org has a more specific Vehicle type, but Product (with Offer and Brand) is also valid and Google reads it fine for listings with price and availability. It's not an error, it's a different choice from what I mentioned in the project's original documentation, and I'd rather correct that here than leave it imprecise.

Why is LCP so slow if the site is small?

I don't know for certain without deep browser profiling, but I found a real technical detail: the image URLs in the HTML have unencoded spaces (/Audi A3 2010/1.png instead of %20). That's the kind of detail worth checking before looking for more complex explanations.

Does this contradict what you wrote about AV Automotores?

Quite the opposite, it confirms it: both projects use a similar approach (SPA with prerendering), but here prerendering actually works. It's proof the pattern works when it's executed correctly, not that the pattern itself is the problem.

How did you verify this with no repository access?

I requested a real URL from the public sitemap with curl and read the full HTML it returned, exactly what a non-JS-rendering crawler would see. I didn't need the code to confirm the title, canonical and JSON-LD are real and specific to that vehicle.

Is this project's sitemap complete?

It has 31 URLs, consistent with a smaller catalog than other similar projects. I found no broken or duplicate URLs in the sample I checked.

How much does it cost to maintain a catalog like this?

Hosting for a static SPA with Firestore is low. The real cost is uploading photos and data for each vehicle from the admin panel, and the time spent periodically checking technical details like image URL encoding.