仅针对特定子域从 robots.txt 禁用 Nextjs 应用程序的网络抓取

问题描述 投票:0回答:1

我的网站部署在 vercel 上,该网站是直接部署在 vercel 上的 Next js 应用程序(不使用 nginx 或任何其他 Web 服务服务器)。有两个域分配给同一个网站。一个是子域 (testers.example.com),另一个是主站点 (www.example.com)。这两个都使用相同的代码库(这是必需的),因此两个域的 robots.txt 是相同的。但我不想启用对 testers.example.com 的爬网,使其在 www.example.com 上保持活动状态。我该如何执行此操作?

我尝试过:

Disallow: tester.example.com
但这并没有成功,因为在允许和禁止属性中使用了相对地址

web-crawler seo vercel robots.txt google-crawlers
1个回答
0
投票

我也遇到了同样的问题,我可以通过这样做解决它。

步骤1

首先我创建了一个环境变量

NEXT_PUBLIC_LiveBaseUrl
并将其值设置为
http://localhost:3000

现在我的项目托管在铁路上,而不是 vercel,但我相信它也应该工作相同。

第2步

在测试器子域部署设置上,我将 env

NEXT_PUBLIC_LiveBaseUrl
设置为
tester.example.com
,在 www 子域部署设置上,我将 env
NEXT_PUBLIC_LiveBaseUrl
值设置为
www.example.com

第3步

我创建了一个 robots.ts 文件并添加了此代码

import { MetadataRoute } from 'next'

export default function robots(): MetadataRoute.Robots {
    const isTesterUrl = process.env.NEXT_PUBLIC_LiveBaseUrl?.includes("tester");
    return {
        rules: {
            userAgent: '*',
            allow: isTesterUrl ? undefined : '/',
            disallow: isTesterUrl ? '/' : undefined,
        },
        sitemap: `${process.env.NEXT_PUBLIC_LiveBaseUrl}/sitemap.xml`,
    }
}

由于在vercel中构建项目时会生成robot.ts文件,因此每个域都会生成不同的robot文件。

我希望这对其他人有帮助

© www.soinside.com 2019 - 2024. All rights reserved.