WEBVTT

1
00:00:00.225 --> 00:00:08.337
You're listening to the Next.js leak that made Search Console flag six U R Ls as duplicates with the homepage as canonical.

2
00:00:08.337 --> 00:00:11.625
Written by Angel Nee-evess on Promptway.

3
00:00:12.285 --> 00:00:18.897
Search Console handed me a status I already knew by name: Duplicate page with proper canonical tag.

4
00:00:18.897 --> 00:00:22.835
I assumed it was the four reprints I had pointed at my personal site.

5
00:00:22.835 --> 00:00:24.085
That was half the story.

6
00:00:24.085 --> 00:00:26.160
The other half was worse.

7
00:00:26.435 --> 00:00:27.210
I curled the live

8
00:00:27.210 --> 00:00:28.135
H T M L.

9
00:00:28.135 --> 00:00:32.285
/blog said its canonical was https://promptway.com.

10
00:00:32.285 --> 00:00:33.360
So did /authors.

11
00:00:33.360 --> 00:00:33.735
So did

12
00:00:33.735 --> 00:00:35.585
/authors/agnel-nieves,

13
00:00:35.585 --> 00:00:37.685
/authors/diego-ferraro,

14
00:00:37.685 --> 00:00:37.797
and

15
00:00:37.797 --> 00:00:37.885
the

16
00:00:37.885 --> 00:00:38.122
rest

17
00:00:38.122 --> 00:00:38.197
of

18
00:00:38.197 --> 00:00:38.285
the

19
00:00:38.285 --> 00:00:38.560
writer

20
00:00:38.560 --> 00:00:39.397
pages.

21
00:00:39.397 --> 00:00:39.697
Google

22
00:00:39.697 --> 00:00:39.835
was

23
00:00:39.835 --> 00:00:40.085
doing

24
00:00:40.085 --> 00:00:40.572
exactly

25
00:00:40.572 --> 00:00:40.697
what

26
00:00:40.697 --> 00:00:46.735
I asked: treating the archive and the writer pages as copies of the homepage, and refusing to index them.

27
00:00:47.060 --> 00:00:50.297
This is the sequel to From Invisible to Indexed.

28
00:00:50.297 --> 00:00:53.747
That piece was about the domain serving the wrong product.

29
00:00:53.747 --> 00:00:58.485
This one is about the product serving the wrong address on its own pages.

30
00:00:58.760 --> 00:01:03.297
What a "proper" canonical actually means The status is not an error.

31
00:01:03.297 --> 00:01:06.735
Google is saying: this U R L has a canonical pointing somewhere

32
00:01:06.735 --> 00:01:07.035
else,

33
00:01:07.035 --> 00:01:07.185
we

34
00:01:07.185 --> 00:01:07.585
agree,

35
00:01:07.585 --> 00:01:09.260
we will not index this one.

36
00:01:09.260 --> 00:01:15.410
When that is a /blog/slug.md alternate, or a trailing-slash redirect, you want that outcome.

37
00:01:15.410 --> 00:01:19.760
When it is /blog, the page you put in the sitemap as the archive, you do not.

38
00:01:20.085 --> 00:01:21.560
I had done the sitemap work.

39
00:01:21.560 --> 00:01:23.997
I had index, follow on those routes.

40
00:01:23.997 --> 00:01:32.897
None of that matters if the <link rel="canonical"> says "the real page is /." The Next.js metadata docs are explicit about this.

41
00:01:32.897 --> 00:01:39.535
Metadata objects shallow-merge down the tree, and nested fields like alternates get replaced by the last segment that defines them.

42
00:01:39.535 --> 00:01:42.797
They do not get replaced by a page that never mentions them.

43
00:01:42.797 --> 00:01:49.110
A root layout with alternates.canonical: "/" becomes the canonical of every child that forgets to set its own.

44
00:01:49.435 --> 00:01:54.935
I had set self-canonicals on /about, /tools, /subscribe, the pillar pages, and every article.

45
00:01:54.935 --> 00:01:58.335
I had not set them on /blog, /authors, or /authors/[slug].

46
00:01:58.335 --> 00:02:00.335
Those three inherited the homepage.

47
00:02:00.335 --> 00:02:03.410
Production H T M L confirmed it.

48
00:02:03.760 --> 00:02:05.860
og:url had the same leak.

49
00:02:05.860 --> 00:02:14.035
The root layout set openGraph.url: "/", and pages that never defined their own openGraph object inherited the homepage as the social U R L.

50
00:02:14.035 --> 00:02:18.147
Google treats og:url as a secondary canonical hint.

51
00:02:18.147 --> 00:02:21.210
I pulled that field off the root layout too.

52
00:02:21.460 --> 00:02:50.185
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: From Invisible to Indexed Optimizing Your Site for AI Agents and L L Ms Optimizing for S E O, A E O, GEO, and AI Search in twenty twenty six Connecting Claude to Google Ads and G A four via M C P That is the HackerNoon pattern.

53
00:02:50.185 --> 00:02:51.960
The original keeps the credit.

54
00:02:51.960 --> 00:03:00.185
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.

55
00:03:00.185 --> 00:03:04.060
I had applied the rule everywhere except to my own reprints.

56
00:03:04.360 --> 00:03:05.185
So I flipped them.

57
00:03:05.185 --> 00:03:07.285
Promptway now self-canonicalizes.

58
00:03:07.285 --> 00:03:15.772
The personal-site copies declare canonical at the Promptway U R L, drop out of that site's sitemap, and show a visible "Originally published on Promptway" line in the header.

59
00:03:15.772 --> 00:03:23.335
L L M S dot text on the personal site lists the Promptway U R L too, so agents that land there still get pointed at the hub.

60
00:03:23.635 --> 00:03:28.222
If you keep a reprint with an off-site canonical, do not submit it in your sitemap.

61
00:03:28.222 --> 00:03:39.085
Submitting it says "index this U R L." The page itself says "index that other U R L." Search Console will file the contradiction under the same status that started this post.

62
00:03:39.360 --> 00:03:44.760
The fix, in the order I would do it again Do not set canonical or og:url on the root layout.

63
00:03:44.760 --> 00:03:46.635
Keep feed auto-discovery there if you want.

64
00:03:46.635 --> 00:03:49.285
Put the homepage canonical on app/page.tsx.

65
00:03:49.285 --> 00:03:51.285
Give every indexable route a self-canonical.

66
00:03:51.285 --> 00:03:54.572
Archive, writers index, writer pages, pillars, tools, about, subscribe.

67
00:03:54.572 --> 00:03:56.860
If a page is in the sitemap, it needs its own address.

68
00:03:56.860 --> 00:03:58.022
Curl the rendered H T M L.

69
00:03:58.022 --> 00:03:59.360
Do not trust the source file.

70
00:03:59.360 --> 00:04:03.522
I used Googlebot as the user agent and grepped for rel="canonical".

71
00:04:03.785 --> 00:04:05.610
The leak was obvious in one pass.

72
00:04:05.610 --> 00:04:07.197
Decide the hub before you syndicate.

73
00:04:07.197 --> 00:04:09.797
If Promptway is the home copy, the other domain points here.

74
00:04:09.797 --> 00:04:13.810
If the personal essay is the home copy, do not put Promptway in the sitemap for that slug.

75
00:04:13.810 --> 00:04:18.485
Give markdown alternates a Link: rel="canonical" header pointing at the H T M L article.

76
00:04:18.485 --> 00:04:21.010
I want /blog/<slug>.md crawlable for agents.

77
00:04:21.010 --> 00:04:23.660
I do not want it competing as a search result.

78
00:04:23.985 --> 00:04:31.672
The www, http, trailing-slash, and *.vercel.app copies were already 308ing to the apex.

79
00:04:31.672 --> 00:04:32.685
Those were fine.

80
00:04:32.685 --> 00:04:36.635
The bug was inside the H T M L I was proud of.

81
00:04:36.910 --> 00:04:43.460
What I am watching now After deploy I will request indexing on /blog, /authors, and each writer page.

82
00:04:43.460 --> 00:04:46.760
The four flipped articles get the same request on Promptway.

83
00:04:46.760 --> 00:04:53.172
On the personal site, those four U R Ls should move into "Duplicate page with proper canonical tag" and stay there.

84
00:04:53.172 --> 00:04:55.935
That is the correct status for a spoke.

85
00:04:56.260 --> 00:04:58.335
I do not have the recrawl numbers yet.

86
00:04:58.335 --> 00:05:01.922
I will update this if Google disagrees with the new tags.

87
00:05:01.922 --> 00:05:06.435
Last time the domain pointed at the wrong product, the machines believed the tag.

88
00:05:06.435 --> 00:05:09.710
I am betting they will believe it this time too.

89
00:05:10.270 --> 00:05:11.120
That's the story.

90
00:05:11.120 --> 00:05:14.032
You'll find every source linked at the end of the article.

91
00:05:14.032 --> 00:05:16.695
Thanks for listening, on Promptway.
