9

情况就是这样,我有一个可以从多个域访问的网站,比如说 www.domain1.com、www.domain2.net、www.domain3.com。域访问完全相同的代码库,但根据域,加载不同的 CSS、图形等。

一切正常,但现在我的问题是如何处理 sitemap.xml?我为默认域 (www.domain1.com) 编写了 sitemap.xml,但是当从其他域访问该站点时呢?sitemap.xml 的内容将包含错误的域。

我读到我可以将多个站点地图文件添加到 robots.txt,这是否意味着我可以例如创建sitemap-domain2.net.xmlsitemap-domain3.com.xml(包含与匹配域的链接)并且简单将它们添加到 robots.txt?

不知何故,我怀疑这是否可行,因此我求助于您的专家来阐明这个问题:)

谢谢

4

6 回答 6

3

您应该使用服务器端代码根据域名发送正确的站点地图以请求/sitemap.xml

于 2011-06-21T14:16:28.357 回答
3

/robots.txt 请求的 Apache 重写规则

如果您使用 Apache 作为网络服务器,您可以robots通过在 .htaccess 文件中使用重写规则为您在该 VHOST 上运行的每个网站创建一个名为并放置 robots.txt 的目录,如下所示:

# URL Rewrite solution for robots.txt for multidomains on single docroot
RewriteCond %{REQUEST_FILENAME} !-d # not an existing dir
RewriteCond %{REQUEST_FILENAME} !-f # not an existing file
RewriteCond robots/%{HTTP_HOST}.txt -f # and the specific robots file exists
RewriteRule ^robots\.txt$ robots/%{HTTP_HOST}.txt [L]

/robots.txt 请求的 NginX 映射

当使用 NginX 作为网络服务器时(同时以yourdomain1.tldyourdomain2.tld作为示例域),您可以使用以下条件变量实现与上述帖子相同的目标(将其放在您的服务器指令之外):

map $host $robots_file {
    default /robots/default.txt;
    yourdomain1.tld /robots/yourdomain1.tld.txt;
    yourdomain2.tld /robots/yourdomain2.tld.txt;
}

这样,您可以在try_files服务器指令中的语句中使用此变量:

location = /robots.txt {
    try_files /robots/$robots_file =404;
}

/robots/*.txt 的内容

在为特定于域的 robots.txt 文件设置别名后,/robots/yourdomain1.tld.txt使用文件底部的以下语法将站点地图添加到每个机器人文件(例如:):

# Sitemap for this specific domain
Sitemap: https://yourdomain1.tld/sitemaps/yourdomain1.tld.xml

对您拥有的所有域执行此操作,您将被设置!

于 2021-01-22T13:35:39.007 回答
1

您必须确保每个XML 站点地图中的 URL 在 domain/subdomain 中匹配。但是,如果您真的想要,您可以使用“站点地图和交叉提交”在一个域外观上托管所有站点地图

于 2011-07-12T22:05:17.770 回答
0

我不是这方面的专家,但我有类似的情况

我的情况是我有一个域但有 3 个子域

所以发生的是每个子域都包含 sitemap.xml

但由于我的案例是每个子域的不同目录

但我很确定可以为每个域中的哪个指定 sitemap.xml。

于 2011-06-21T14:18:34.453 回答
0

我发现实现这一目标的最简单方法是使用 XML 站点地图生成器为每个域名创建站点地图。将 /sitemap.xml 放在域或子域的根目录中。转到 Google 搜索并为每个域名创建单独的属性。在 Search Console 中向每个域提交适当的站点地图。提交会说显示成功。

于 2020-05-25T03:43:44.080 回答
0

我现在正在从事的一个项目也面临着类似的情况。而谷歌搜索中心其实有以下答案:

如果您有多个网站,您可以通过创建一个或多个包含所有已验证站点的 URL 的站点地图并将站点地图保存到一个位置来简化创建和提交站点地图的过程。所有网站都必须在 Search Console 中进行验证。

因此,似乎只要您在 Google Search Console 中添加了不同的域作为您的属性,至少 Google 会知道如何处理其余部分,即使您将其他域的站点地图仅上传到您在谷歌搜索控制台。

对于我的用例,然后我使用服务器端代码生成站点地图,其中所有包含英语内容的动态页面最终都会在我的 .io 域上获得一个位置,而我的包含德语内容的页面最终会在 .de 域上获得一个位置:

<url>
    <loc>https://www.mydomain.io/page/some-english-content</loc>
    <changefreq>weekly</changefreq>
</url>
<url>
    <loc>https://www.mydomain.de/page/some-german-content</loc>
    <changefreq>weekly</changefreq>
</url>

然后谷歌处理其余的。请参阅文档

于 2021-09-17T15:41:00.493 回答