@webnumseoagent/next 0.3.0 → 0.3.1

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
@@ -303,8 +303,14 @@ export async function seoRobots(): Promise<MetadataRoute.Robots> {
303
303
  // return new Response(await seoRobotsTxt(), { headers: { "content-type": "text/plain" } });
304
304
  // }
305
305
  // Fail-safe: при недоступности платформы отдаём разрешающий robots (никогда не Disallow: /).
306
+ // Маркер-комментарий в начале robots.txt — чтобы платформа могла определить, что robots отдаёт
307
+ // наш адаптер, даже когда Vercel обслуживает роут как ISR-статик и срезает заголовок x-seoagent-robots
308
+ // (по телу — надёжно). Комментарий безвреден: краулеры игнорируют строки, начинающиеся с #.
309
+ const ROBOTS_MARK = "# SEO Agent\n";
310
+ const withRobotsMark = (t: string) => (t.startsWith(ROBOTS_MARK) ? t : ROBOTS_MARK + t);
311
+
306
312
  export async function seoRobotsTxt(): Promise<string> {
307
- const FALLBACK = "User-agent: *\nAllow: /\n";
313
+ const FALLBACK = withRobotsMark("User-agent: *\nAllow: /\n");
308
314
  if (!API || !SITE || !TOKEN) return FALLBACK;
309
315
  try {
310
316
  const r = await fetch(`${API}/api/seo/${SITE}/robots.txt`, {
@@ -313,7 +319,7 @@ export async function seoRobotsTxt(): Promise<string> {
313
319
  signal: AbortSignal.timeout(5000),
314
320
  });
315
321
  if (!r.ok) return FALLBACK;
316
- return await r.text();
322
+ return withRobotsMark(await r.text());
317
323
  } catch {
318
324
  return FALLBACK;
319
325
  }
package/dist/client.js CHANGED
@@ -305,8 +305,13 @@ async function seoRobots() {
305
305
  // return new Response(await seoRobotsTxt(), { headers: { "content-type": "text/plain" } });
306
306
  // }
307
307
  // Fail-safe: при недоступности платформы отдаём разрешающий robots (никогда не Disallow: /).
308
+ // Маркер-комментарий в начале robots.txt — чтобы платформа могла определить, что robots отдаёт
309
+ // наш адаптер, даже когда Vercel обслуживает роут как ISR-статик и срезает заголовок x-seoagent-robots
310
+ // (по телу — надёжно). Комментарий безвреден: краулеры игнорируют строки, начинающиеся с #.
311
+ const ROBOTS_MARK = "# SEO Agent\n";
312
+ const withRobotsMark = (t) => (t.startsWith(ROBOTS_MARK) ? t : ROBOTS_MARK + t);
308
313
  async function seoRobotsTxt() {
309
- const FALLBACK = "User-agent: *\nAllow: /\n";
314
+ const FALLBACK = withRobotsMark("User-agent: *\nAllow: /\n");
310
315
  if (!API || !SITE || !TOKEN)
311
316
  return FALLBACK;
312
317
  try {
@@ -317,7 +322,7 @@ async function seoRobotsTxt() {
317
322
  });
318
323
  if (!r.ok)
319
324
  return FALLBACK;
320
- return await r.text();
325
+ return withRobotsMark(await r.text());
321
326
  }
322
327
  catch {
323
328
  return FALLBACK;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webnumseoagent/next",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
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",