1

http://www.equispot.comにある Web ロールとして Azure でホストされている C#/MVC4 サイトがあります。私のサイトに関連するいくつかの検索を Google でチェックしているときに、このページにリンクしている検索結果を見つけました。

http://equispot.cloudapp.net/horses-for-sale/quarter-horses/13

ドメイン名の違いに注意してください。今、私はすでに正規タグを持っています (cloudapp.net リンクのソースを表示すると、正規の rel タグがhttp://www.equispot.comのメイン サイトを指していることがわかります)。

では、なぜ Google はそのページを cloudapp.net ドメインでインデックスに登録したのでしょうか? 最近、SERP が低下していることに気付きました。これが理由の一部なのかどうか疑問に思っています (SERP の変更とほぼ同時に Azure に移行しました)。関係ないかもしれませんが…

これらのページが Google によってインデックス付けされないようにするにはどうすればよいですか? または、Azure Web ロールが www.equispot.com と equispot.com 以外に応答しないようにするにはどうすればよいですか? これをオンプレミスでホストしたとき、自分のドメインにのみ応答するように IIS を構成しました (以前のプロバイダーも、何らかの理由でいくつかの重複したコンテンツを生成していました)。

4

2 に答える 2

2

アプリケーションが実行されているホストが必要なドメイン名であることを確認するだけです。そうでない場合は、必要なドメイン名に 302 リダイレクトを実行してください。

リクエストを検査してリダイレクトできる場所がいくつかあります。

 - Global.asax
 - Custom module
 - Override the OnActionExecuting for action methods
于 2013-05-20T18:19:11.243 に答える
0

ServiceDefinition.csdef ファイルの hostHeader 構成を使用してこれを行う簡単な方法が見つからなかったため、独自のRedirectInvalidDomainsAttributeクラスをロールして、無効なドメインの要求中に 301 (Moved Permanently) リダイレクトをメイン サイトに戻しました。他の誰かが同じ問題に遭遇した場合に備えて、コードは次のとおりです。

App_Start/FilterConfig.cs

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new RedirectInvalidDomainsAttribute());
}

RedirectInvalidDomainsAttribute.cs

public class RedirectInvalidDomainsAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var url = filterContext.HttpContext.Request.Url;
        if (url == null) return;

        var host = url.Host;

        if (host.Contains("equispot.com") || host.Contains("localhost")) return;
        string subdomain = GetSubDomain(host);

        Guid guid;
        if (Guid.TryParseExact(subdomain, "N", out guid)) 
        {
            // this is a staging domain, it's okay
            return;
        }

        // Invalid domain - 301 redirect
        UriBuilder builder = new UriBuilder(url) {Host = "www.equispot.com"};
        filterContext.Result = new RedirectResult(builder.Uri.ToString(), true);

    }

    // This isn't perfect, but it works for the sub-domains Azure provides
    private static string GetSubDomain(string host)
    {
        if (host.Split('.').Length > 1)
        {
            int index = host.IndexOf(".");
            return host.Substring(0, index);
        }

         return null;
     }
}
于 2013-05-21T14:19:02.540 に答える