Lovable builds a single-page app: the server sends the same index.html for every URL, and the titles are set by JavaScript afterwards. Google does run JavaScript, but later and not always, and many social/LLM crawlers don't run it at all. So they see what's in index.html.
In order of effort:
- Today: edit
index.htmland replace the default<title>and<meta name="description">with something true for the whole site. That alone fixes the ugly results for the homepage. - Per-page titles: keep react-helmet-async, but understand Google picks them up only on the JS rendering pass. It helps, slowly.
- Real fix for a content site: prerendering. Either a prerender service in front of your host, or a build step that renders each route to static HTML. For a directory where every page is a bakery, that's what gets you proper listings.
If SEO is the main point of the site, a framework with server rendering (Next.js, Astro) is the long-term answer, but do 1 today.