---
title: Google Thought My Archive Was the Homepage
dek: >-
  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.
slug: google-thought-my-archive-was-the-homepage
publishedAt: '2026-08-17'
author: agnel-nieves
pillar: aeo-visibility
tags:
  - aeo
  - canonical
  - search-console
  - nextjs
  - indexing
summary: >-
  I opened Search Console and saw 'Duplicate page with proper canonical tag' on
  URLs I wanted indexed. The archive, the writers index, and every author page
  were advertising the homepage as their canonical. Next.js had inherited a root
  layout canonical of / onto every page that forgot to override it. I fixed the
  leak, then flipped four reprints so Promptway is the hub and agnelnieves.com
  is the spoke.
draft: false
heroImage: /blog/google-thought-my-archive-was-the-homepage.webp
heroImageAlt: >-
  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.
heroVideo: /blog/google-thought-my-archive-was-the-homepage.mp4
ogImage: /blog/google-thought-my-archive-was-the-homepage-og.jpg
assetCredit: Hero illustration and animation generated with Grok.
audioEn: /blog/google-thought-my-archive-was-the-homepage.en.mp3
audioDurationSeconds: 317
audioCredit: Synthesized via Kokoro (am_puck).
---

Search Console handed me a status I already knew by name: [Duplicate page with proper canonical tag](https://support.google.com/webmasters/answer/7440203#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](/blog/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](https://nextjs.org/docs/app/api-reference/functions/generate-metadata#behavior), 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](https://agnelnieves.com) and then reprinted here with `canonical` pointing back:

- [From Invisible to Indexed](/blog/from-invisible-to-indexed)
- [Optimizing Your Site for AI Agents and LLMs](/blog/optimizing-your-site-for-ai-agents)
- [Optimizing for SEO, AEO, GEO, and AI Search in 2026](/blog/optimizing-for-ai-search-in-2026)
- [Connecting Claude to Google Ads and GA4 via MCP](/blog/connecting-claude-to-google-ads-and-ga4-via-mcp)

That is the HackerNoon pattern. The original keeps the credit. I wrote [Getting Your Writing Seen Beyond Your Own Site](/blog/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

- [Google Search Console: Duplicate page with proper canonical tag](https://support.google.com/webmasters/answer/7440203#duplicate_page_with_proper_canonical_tag)
- [Next.js: generateMetadata, how metadata merges](https://nextjs.org/docs/app/api-reference/functions/generate-metadata)
- [Google: How canonicalization works](https://developers.google.com/search/docs/crawling-indexing/canonicalization)
- [From Invisible to Indexed](/blog/from-invisible-to-indexed)
- [Getting Your Writing Seen Beyond Your Own Site](/blog/getting-your-writing-seen-beyond-your-own-site)
---
