Skip to main content
Promptway
AEO & Visibility··5 min read

Google Thought My Archive Was the Homepage

Search Console said duplicate page with a proper canonical. Six of my own URLs were pointing at /. Here is the Next.js leak, and why I flipped four reprints back to Promptway.

Agnel NievesAgnel Nieves

Read in Am Puck's voice, synthesized.AI voice

View as Markdown
Engraved illustration of pointing hands encircling a golden Via Incerta post on a coral-red background, with a glowing house, empty frames, and a no-entry door amid black foliage borders.
Hero illustration and animation generated with Grok.

Search Console handed me a status I already knew by name: Duplicate page with proper canonical tag. I assumed it was the four reprints I had pointed at my personal site. That was half the story. The other half was worse.

I curled the live HTML. /blog said its canonical was https://promptway.com. So did /authors. So did /authors/agnel-nieves, /authors/diego-ferraro, and the rest of the writer pages. Google was doing exactly what I asked: treating the archive and the writer pages as copies of the homepage, and refusing to index them.

This is the sequel to From Invisible to Indexed. That piece was about the domain serving the wrong product. This one is about the product serving the wrong address on its own pages.

What a "proper" canonical actually means

The status is not an error. Google is saying: this URL has a canonical pointing somewhere else, we agree, we will not index this one. When that is a /blog/slug.md alternate, or a trailing-slash redirect, you want that outcome. When it is /blog, the page you put in the sitemap as the archive, you do not.

I had done the sitemap work. I had index, follow on those routes. None of that matters if the <link rel="canonical"> says "the real page is /."

The Next.js metadata docs are explicit about this. Metadata objects shallow-merge down the tree, and nested fields like alternates get replaced by the last segment that defines them. They do not get replaced by a page that never mentions them. A root layout with alternates.canonical: "/" becomes the canonical of every child that forgets to set its own.

I had set self-canonicals on /about, /tools, /subscribe, the pillar pages, and every article. I had not set them on /blog, /authors, or /authors/[slug]. Those three inherited the homepage. Production HTML confirmed it.

og:url had the same leak. The root layout set openGraph.url: "/", and pages that never defined their own openGraph object inherited the homepage as the social URL. Google treats og:url as a secondary canonical hint. I pulled that field off the root layout too.

The four reprints pointing the wrong way

The Search Console bucket also held four articles I had published first on agnelnieves.com and then reprinted here with canonical pointing back:

That is the HackerNoon pattern. The original keeps the credit. I wrote Getting Your Writing Seen Beyond Your Own Site arguing the opposite for this publication: Promptway is the hub, everywhere else is a spoke. I had applied the rule everywhere except to my own reprints.

So I flipped them. Promptway now self-canonicalizes. The personal-site copies declare canonical at the Promptway URL, drop out of that site's sitemap, and show a visible "Originally published on Promptway" line in the header. llms.txt on the personal site lists the Promptway URL too, so agents that land there still get pointed at the hub.

If you keep a reprint with an off-site canonical, do not submit it in your sitemap. Submitting it says "index this URL." The page itself says "index that other URL." Search Console will file the contradiction under the same status that started this post.

The fix, in the order I would do it again

  1. Do not set canonical or og:url on the root layout. Keep feed auto-discovery there if you want. Put the homepage canonical on app/page.tsx.
  2. Give every indexable route a self-canonical. Archive, writers index, writer pages, pillars, tools, about, subscribe. If a page is in the sitemap, it needs its own address.
  3. Curl the rendered HTML. Do not trust the source file. I used Googlebot as the user agent and grepped for rel="canonical". The leak was obvious in one pass.
  4. Decide the hub before you syndicate. If Promptway is the home copy, the other domain points here. If the personal essay is the home copy, do not put Promptway in the sitemap for that slug.
  5. Give markdown alternates a Link: rel="canonical" header pointing at the HTML article. I want /blog/<slug>.md crawlable for agents. I do not want it competing as a search result.

The www, http, trailing-slash, and *.vercel.app copies were already 308ing to the apex. Those were fine. The bug was inside the HTML I was proud of.

What I am watching now

After deploy I will request indexing on /blog, /authors, and each writer page. The four flipped articles get the same request on Promptway. On the personal site, those four URLs should move into "Duplicate page with proper canonical tag" and stay there. That is the correct status for a spoke.

I do not have the recrawl numbers yet. I will update this if Google disagrees with the new tags. Last time the domain pointed at the wrong product, the machines believed the tag. I am betting they will believe it this time too.

Sources

View as Markdown

Read next

Engraved illustration of an open ledger with gold seals on a stone pedestal amid oak leaves and blossoms, two top-hatted figures with quills and scrolls below, spot color gold on blue background.

The Stack · 8 min read

Block Put Its Agents in the Team Chat. Buzz Is an Audit Log Before It Is a Slack Killer.

Block's open-source workspace gives agents identities, channels, code, and signed histories. Three early deployments show both the point and the missing permissions.