同一站点的多个域的站点地图

Posted

技术标签:

【中文标题】同一站点的多个域的站点地图【英文标题】:sitemap for multiple domains of same site 【发布时间】:2011-09-19 13:58:25 【问题描述】:

情况就是这样,我有一个可以从多个域访问的网站,比如说 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?

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

谢谢

【问题讨论】:

【参考方案1】:

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

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

看来,只要您在 Google Search Console 中添加了不同的域作为您的属性,至少 Google 会知道如何处理其余的域,即使您仅将其他域的站点地图上传到您的一个Google Search Console 中的属性。

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

<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>

然后 Google 会处理其余的事情。见docs。

【讨论】:

【参考方案2】:

/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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

您必须确保每个 XML sitemap match within domain/subdomain 中的 URL。但是,如果您真的需要,您可以使用“Sitemaps & Cross Submits”在一个域外观上托管所有站点地图

【讨论】:

【参考方案5】:

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

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

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

但由于我的情况是每个子域的目录不同

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

【讨论】:

【参考方案6】:

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

【讨论】:

我将如何采用这种方法?在 .htaccess 中指定一些重写规则,它将提供一些 php 文件,这些文件将根据域返回正确的 XML?哎呀,我喜欢那个声音,关于 mod_rewrite 部分的任何想法? :D

以上是关于同一站点的多个域的站点地图的主要内容,如果未能解决你的问题,请参考以下文章

如何在具有不同域的同一 IP/服务器上托管多个 Node.js 站点?

如何使用python在每个域和子域中查找站点地图

Google站点地图索引 - 包含参数的站点地图位置

指定站点地图语言(所有站点地图的语言相同)

Google搜索控制台无法获取站点地图“无法读取站点地图”

利用ASP.NET里自带的站点地图工具制作网站站点地图