如何阻止ASP.NET Core 6 MVC站点的默认.azurewebsites.net域名被谷歌索引
解决Azure App Service默认域名与自定义域名共存于搜索结果的问题
1. 修正301重定向的全局配置
之前的重定向可能未覆盖所有请求场景,建议在ASP.NET Core的中间件层实现全局、无遗漏的301跳转:
在Program.cs中,在app.UseRouting()之后添加以下中间件代码,确保所有来自默认域名的请求都被永久重定向到自定义域名,同时保留请求路径和查询参数:
app.Use(async (context, next) => { var defaultDomain = "domain.azurewebsite.net"; var customDomain = "your-custom-domain.com"; // 检查请求主机是否为默认域名 if (context.Request.Host.Host.Equals(defaultDomain, StringComparison.OrdinalIgnoreCase)) { // 构造跳转URL,保留原请求的协议、端口、路径和查询参数 var newUri = new UriBuilder( context.Request.Scheme, customDomain, context.Request.Host.Port, context.Request.Path, context.Request.QueryString.ToString() ); context.Response.StatusCode = StatusCodes.Status301MovedPermanently; context.Response.Headers.Location = newUri.Uri.ToString(); return; } await next(); });
同时确保Azure App Service的HTTPS 仅用选项已开启(在App Service的“TLS/SSL 设置”中),避免HTTP请求的重定向遗漏。
2. 针对不同域名返回对应的robots.txt
单一的robots.txt无法区分域名,需通过代码根据请求域名返回不同的规则:
在Program.cs中添加以下路由映射:
app.MapGet("/robots.txt", async context => { var defaultDomain = "domain.azurewebsite.net"; string robotsContent; if (context.Request.Host.Host.Equals(defaultDomain, StringComparison.OrdinalIgnoreCase)) { // 禁止搜索引擎爬取默认域名的所有内容 robotsContent = @"User-agent: * Disallow: /"; } else { // 允许搜索引擎爬取自定义域名的内容,可按需添加其他规则 robotsContent = @"User-agent: * Allow: /"; } context.Response.ContentType = "text/plain"; await context.Response.WriteAsync(robotsContent); });
3. 谷歌搜索控制台的主动干预
- 验证域名所有权:分别在谷歌搜索控制台中验证默认域名和自定义域名的所有权。
- 提交默认域名移除请求:在默认域名的搜索控制台中,使用“移除URL”工具提交整个域名的移除申请,说明需替换为自定义域名。
- 设置自定义域名为首选域名:在自定义域名的搜索控制台设置中,指定该域名为首选域名,明确告知谷歌这是官方唯一域名。
- 提交自定义域名站点地图:上传并提交自定义域名的站点地图,加速谷歌对新域名内容的抓取和索引替换。
4. Azure App Service的额外检查
- 确认自定义域名的绑定已正确配置,在App Service的“自定义域名”页面中,确保默认域名未被标记为主域名。
- 可将域名配置存入应用程序设置(在“配置”->“应用程序设置”中添加
DEFAULT_DOMAIN和CUSTOM_DOMAIN变量),避免代码硬编码,方便后续修改。
内容的提问来源于stack exchange,提问作者max ray
相关产品推荐
相关产品推荐

