Titles: Claude thought our homepage was called “laup.ai wordmark”

After Simon's talk at Netthandelskonferansen, I was reminded again how important page titles are, and decided to take a second look at ours. I was shocked: Brave, the search index Claude uses, had our homepage listed as “laup.ai wordmark”. This is how that happened, how we fixed it, and what we expect to change.

By Gullik Vetvik Killie,

Brave Search results for site:laup.ai. The first result, laup.ai, is titled “laup.ai wordmark”. The About page below it is titled just “Laup”.
site:laup.ai on Brave Search, the index Claude searches. Our homepage is “laup.ai wordmark”.

What we saw

We track our own site the way we track our customers' sites. Every day Laup asks Claude and the other AI engines the same set of buying questions, and records which pages each engine read and the title it had for each one.

Claude had our homepage as “laup.ai wordmark”, and most of our other pages as just “Laup”. The pages themselves had proper titles: Bing and Google both showed them correctly. For Labrador (ChatGPT) we can't say.

Bing results for site:laup.ai. The first result is titled “Laup GEO and AI visibility: see whether AI recommends you”. The About page is titled “About - Laup”.
site:laup.ai on Bing. The homepage and the About page carry their real titles.

Where the title went

Measured

A search index learns a page's title from the HTML its crawler fetches. So we fetched laup.ai/pricing the way ClaudeBot does, with its user agent, and recorded where three things landed: the end of the <head>, a description hidden in our logo, and the <title>. Bingbot is there for comparison.

Byte position of the end of the head, the logo description and the title, per crawler
CrawlerEnd of headLogo descriptionTitle
ClaudeBotbyte 3,422byte 8,550byte 65,152after the scripts
Bingbotbyte 5,154byte 10,213byte 2,169inside the head

Our site runs on Next.js 15. To get pixels on screen sooner, it streams the page's metadata, title included, after the body has started. It makes an exception for a built-in list of crawlers that need the metadata in the head. Bingbot is on that list. ClaudeBot is not. So ClaudeBot got a head with no title in it, and the real title about 60 KB further down.

Where “laup.ai wordmark” came from

With no title in the head, something else had to stand in. The first title-like text after the head was a description inside our logo: an SVG <desc> element that starts “laup.ai wordmark”. The only other place that string appeared was the alt text of our social-card image, which also arrived after the body. It is exactly what Brave held as our homepage's title.Measured

Our logo's SVG markup: an aria-label of laup.ai, then a desc element reading “laup.ai wordmark: laup in flowing calligraphic script with connected letterforms, followed by .ai in clean sans-serif.”
The logo's hidden description, in the HTML of every page on laup.ai.

This is the second time our logo has named our pages. In August the logo carried an SVG <title>, and 25 of our 36 pages were read as “laup.ai”. We removed it on 21 August.

What we don't know is exactly how Brave's crawler picks a title. Inferred Either it stops reading before 65 KB and never reaches the real title, or it takes the first title-like text after an empty head. Both fit what we see, and putting the title back in the head fixes both. The other pages that show up as just “Laup” most likely get it from the site name in our structured data, the one piece of metadata that did sit in the head.

Why this costs us with Claude

Claude does not browse the web when you ask it something. It searches Brave's index first, and for each result it gets a URL, a title, the page's age and an excerpt. A page the search does not return, Claude never sees, and the title is one of the strongest signals a search index ranks on. A result titled “laup.ai wordmark” matches almost nothing anyone searches for.

Our numbers point the same way. Measured Over the 30 days to 25 September, only 44 of Claude's 1,260 answers read a page on laup.ai, and 43 of those named Laup. When Claude opens our pages, it uses them. It just rarely finds them.

The same streaming affected the other AI engines' crawlers too, in smaller ways, and we have seen before how much titles matter. When a homepage rebuild accidentally dropped the words that say what we do, “GEO” and “AI visibility”, from our title, we dropped out of ChatGPT's answers, and came back when we put them back on 31 August.

The fix

  • The title goes in the head for every crawler. One line in our Next.js config treats every visitor like the crawlers on its list. Our marketing metadata never changes per request, so there was nothing to gain from streaming it.
  • The logo description is gone. The logo keeps its accessible name through its aria-label.

In the same release we also rewrote our page titles to say what each page is. The fix went live shortly before this was published, and we asked Brave to crawl the site again.

What we expect

The starting point, from the week before the fix (19 to 25 September): Claude cited laup.ai in 15 of its 308 answers to questions that don't mention Laup by name. We leave out the one question that does, because Claude finds us for that one whatever our title says.

  • Brave shows our real titles within about a week. Last time, Claude first read a page we had submitted to Brave five days after we submitted it.
  • Once it does, we expect Claude to cite laup.ai in more of those answers. I am curiously awaiting to see how large the effect will be.

We track it the way our customers track their work: as action cards on our own Laup board. One card is scoped to Claude, one to the other engines. On launch day each card freezes the two weeks before as its baseline, and every run after that shows the change.

Two action cards on the Laup board, each with priority 55. #25: Get Laup's real page titles into Brave, the index Claude searches, with the Claude icon. #26: Serve Laup's page titles in the head to ChatGPT, Copilot and Gemini crawlers, with those three engines' icons.
The two cards on laup.ai's own board: #25 measured on Claude only, #26 on ChatGPT, Copilot and Gemini.

Because the new titles shipped in the same release, a rise will not tell us which of the two changes did it. And if Brave shows the right titles and Claude's count stays flat for two weeks, the title was not what kept Claude away. We will say so in the next entry either way.

Check your own site

  • Fetch a page as ClaudeBot and see which comes first. If </head> comes first, crawlers are getting your title late.
    curl -sA ClaudeBot https://your-site.com/ | grep -bo '<title>\|</head>'
  • Search site:your-site.com on search.brave.com and read the titles. Those are the ones Claude sees.
  • On Next.js 15 or later, look up htmlLimitedBots in the Next.js docs. It decides which crawlers get your metadata in the head.
  • If your logo is an inline SVG, check it for <title> and <desc> elements. They are useful for screen readers, and a crawler can mistake them for your page title.

Next entry: whether Claude came back. More experiments on our own site are collected under How we work with our AI visibility.

Sources

The details: every measurement behind this story, engine by engine, is in Where our titles went.