@webnumseoagent/next 0.1.21 → 0.1.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/client.ts CHANGED
@@ -158,6 +158,15 @@ function mergeIntoMetadata(fallback: Metadata, f: SeoFields, route: string): Met
158
158
  m.description = f.description;
159
159
  }
160
160
  if (f.canonical) m.alternates = { ...(m.alternates ?? {}), canonical: f.canonical };
161
+ // Авто self-canonical: если ни сайт (fallback), ни конфиг не задали canonical — ставим ссылку на
162
+ // саму страницу. Существующий canonical НЕ трогаем (сайт может каноникалить на другой URL — дедуп).
163
+ // Путь нормализуем к ведущему «/»; при заданном baseUrl делаем абсолютным, иначе относительный —
164
+ // он тоже даёт верный self-canonical (резолвится к URL страницы / через metadataBase сайта).
165
+ if (!m.alternates?.canonical) {
166
+ const path = "/" + String(route ?? "").replace(/^\/+/, "");
167
+ const self = f.baseUrl ? f.baseUrl.replace(/\/+$/, "") + path : path;
168
+ m.alternates = { ...(m.alternates ?? {}), canonical: self };
169
+ }
161
170
  if (f.robots) {
162
171
  const r = f.robots;
163
172
  const base: Record<string, unknown> =
package/dist/client.js CHANGED
@@ -157,6 +157,15 @@ function mergeIntoMetadata(fallback, f, route) {
157
157
  }
158
158
  if (f.canonical)
159
159
  m.alternates = { ...(m.alternates ?? {}), canonical: f.canonical };
160
+ // Авто self-canonical: если ни сайт (fallback), ни конфиг не задали canonical — ставим ссылку на
161
+ // саму страницу. Существующий canonical НЕ трогаем (сайт может каноникалить на другой URL — дедуп).
162
+ // Путь нормализуем к ведущему «/»; при заданном baseUrl делаем абсолютным, иначе относительный —
163
+ // он тоже даёт верный self-canonical (резолвится к URL страницы / через metadataBase сайта).
164
+ if (!m.alternates?.canonical) {
165
+ const path = "/" + String(route ?? "").replace(/^\/+/, "");
166
+ const self = f.baseUrl ? f.baseUrl.replace(/\/+$/, "") + path : path;
167
+ m.alternates = { ...(m.alternates ?? {}), canonical: self };
168
+ }
160
169
  if (f.robots) {
161
170
  const r = f.robots;
162
171
  const base = typeof m.robots === "string" ? robotsFromString(m.robots)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webnumseoagent/next",
3
- "version": "0.1.21",
3
+ "version": "0.1.22",
4
4
  "description": "Runtime SEO adapter + installer for Next.js App Router sites (SEO Agent platform)",
5
5
  "main": "dist/client.js",
6
6
  "types": "dist/client.d.ts",