@webnumseoagent/next 0.1.15 → 0.1.16
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 +16 -2
- package/dist/client.js +13 -0
- package/package.json +1 -1
package/client.ts
CHANGED
|
@@ -21,8 +21,9 @@ interface SeoFields {
|
|
|
21
21
|
description?: string;
|
|
22
22
|
canonical?: string;
|
|
23
23
|
robots?: { index?: boolean; follow?: boolean };
|
|
24
|
-
og?: { title?: string; description?: string; image?: string };
|
|
25
|
-
twitter?: { card?: string; image?: string };
|
|
24
|
+
og?: { title?: string; description?: string; image?: string; siteName?: string; locale?: string };
|
|
25
|
+
twitter?: { card?: string; image?: string; site?: string };
|
|
26
|
+
facebook?: { appId?: string; admins?: string }; // fb:app_id / fb:admins (admins — через запятую)
|
|
26
27
|
jsonLd?: unknown[];
|
|
27
28
|
verification?: Record<string, string>; // проверочные мета-теги: metaName → content
|
|
28
29
|
}
|
|
@@ -67,6 +68,8 @@ function mergeIntoMetadata(fallback: Metadata, f: SeoFields): Metadata {
|
|
|
67
68
|
...(f.og.title ? { title: f.og.title } : {}),
|
|
68
69
|
...(f.og.description ? { description: f.og.description } : {}),
|
|
69
70
|
...(f.og.image ? { images: [f.og.image] } : {}),
|
|
71
|
+
...(f.og.siteName ? { siteName: f.og.siteName } : {}),
|
|
72
|
+
...(f.og.locale ? { locale: f.og.locale } : {}),
|
|
70
73
|
};
|
|
71
74
|
}
|
|
72
75
|
if (f.twitter) {
|
|
@@ -74,8 +77,19 @@ function mergeIntoMetadata(fallback: Metadata, f: SeoFields): Metadata {
|
|
|
74
77
|
...(m.twitter ?? {}),
|
|
75
78
|
...(f.twitter.card ? { card: f.twitter.card as "summary" | "summary_large_image" } : {}),
|
|
76
79
|
...(f.twitter.image ? { images: [f.twitter.image] } : {}),
|
|
80
|
+
...(f.twitter.site ? { site: f.twitter.site } : {}),
|
|
77
81
|
};
|
|
78
82
|
}
|
|
83
|
+
// fb:app_id / fb:admins — только через нативный metadata.facebook (property=, не name=).
|
|
84
|
+
// Тип Next — union (appId XOR admins), поэтому собираем объект и приводим к типу.
|
|
85
|
+
if (f.facebook && (f.facebook.appId || f.facebook.admins)) {
|
|
86
|
+
const admins = (f.facebook.admins ?? "").split(",").map((s) => s.trim()).filter(Boolean);
|
|
87
|
+
m.facebook = {
|
|
88
|
+
...(m.facebook ?? {}), // как и остальные блоки — накладываемся поверх дефолта сайта, не затирая его
|
|
89
|
+
...(f.facebook.appId ? { appId: f.facebook.appId } : {}),
|
|
90
|
+
...(admins.length ? { admins: admins.length === 1 ? admins[0] : admins } : {}),
|
|
91
|
+
} as Metadata["facebook"];
|
|
92
|
+
}
|
|
79
93
|
// Проверочные мета-теги веб-мастерских → <meta name content> через metadata.other.
|
|
80
94
|
// Мержим, не затирая существующий other сайта.
|
|
81
95
|
if (f.verification && typeof f.verification === "object") {
|
package/dist/client.js
CHANGED
|
@@ -66,6 +66,8 @@ function mergeIntoMetadata(fallback, f) {
|
|
|
66
66
|
...(f.og.title ? { title: f.og.title } : {}),
|
|
67
67
|
...(f.og.description ? { description: f.og.description } : {}),
|
|
68
68
|
...(f.og.image ? { images: [f.og.image] } : {}),
|
|
69
|
+
...(f.og.siteName ? { siteName: f.og.siteName } : {}),
|
|
70
|
+
...(f.og.locale ? { locale: f.og.locale } : {}),
|
|
69
71
|
};
|
|
70
72
|
}
|
|
71
73
|
if (f.twitter) {
|
|
@@ -73,6 +75,17 @@ function mergeIntoMetadata(fallback, f) {
|
|
|
73
75
|
...(m.twitter ?? {}),
|
|
74
76
|
...(f.twitter.card ? { card: f.twitter.card } : {}),
|
|
75
77
|
...(f.twitter.image ? { images: [f.twitter.image] } : {}),
|
|
78
|
+
...(f.twitter.site ? { site: f.twitter.site } : {}),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// fb:app_id / fb:admins — только через нативный metadata.facebook (property=, не name=).
|
|
82
|
+
// Тип Next — union (appId XOR admins), поэтому собираем объект и приводим к типу.
|
|
83
|
+
if (f.facebook && (f.facebook.appId || f.facebook.admins)) {
|
|
84
|
+
const admins = (f.facebook.admins ?? "").split(",").map((s) => s.trim()).filter(Boolean);
|
|
85
|
+
m.facebook = {
|
|
86
|
+
...(m.facebook ?? {}), // как и остальные блоки — накладываемся поверх дефолта сайта, не затирая его
|
|
87
|
+
...(f.facebook.appId ? { appId: f.facebook.appId } : {}),
|
|
88
|
+
...(admins.length ? { admins: admins.length === 1 ? admins[0] : admins } : {}),
|
|
76
89
|
};
|
|
77
90
|
}
|
|
78
91
|
// Проверочные мета-теги веб-мастерских → <meta name content> через metadata.other.
|
package/package.json
CHANGED