【问题标题】:how to configure ajax site for googlebot?如何为 googlebot 配置 ajax 站点?
【发布时间】:2015-03-03 15:45:25
【问题描述】:

我有一个启用了 html5 模式的 Angular 网站,因此我可以拥有漂亮的网址。我需要为 googlebot 配置网站。到目前为止我所做的就是把它放在元标记中:

<meta name="fragment" content="!">

我的假设是通过放置那个元标记,我通知 googlebot 它是一个 ajax 站点,它应该在域名和 url 其余部分之间的 url 中附加 _escaped_fragment_。例如,如果它试图爬取http://thehaileselassie.com/Italian_Occupation,它会将其转换为http:// thehaileselassie.com/?_escaped_fragment_=Italian_Occupation。但我不认为这是正在发生的事情。我相信它会将其附加到末尾,如下所示:http:// thehaileselassie.com/Italian_Occupation?_escaped_fragment_=。我不太确定自己做错了什么。

额外信息

我在 RouteConfig 中有这个,所以所有服务器调用都发送到 HomeController:

 routes.MapRoute(
            name: "Default",
            url: "{*url}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

这是控制器的内容:

 public ActionResult Index()
    {
        string fragment = Request.QueryString["_escaped_fragment_"];
        if (fragment != null)
        {
            if (String.IsNullOrWhiteSpace(fragment))
            {
                string url = "/templates/homeView.html";
                return File(Server.MapPath(url), "text/html");
            }

            else
            {
                string url = "/templates/" + fragment + ".html";
                return File(Server.MapPath(url), "text/html");
            }

        }
        return View();
    }

【问题讨论】:

    标签: javascript c# angularjs googlebot


    【解决方案1】:

    ?_escaped_fragment_= 应该附加到末尾。为了获得域之后的部分,我正在做的是:Request.Url.LocalPath。这将返回 /Italian_Occupation。之后我做了一些逻辑来动态创建 xml 并返回它:

     string url = "/templates" + Request.Url.LocalPath + ".html";
                XmlDocument doc = new XmlDocument();
                try
                {
                    doc.Load(Server.MapPath(url));
                }
                catch
                {
                    return HttpNotFound(); 
                }
    
    
                var settings = new System.Xml.XmlWriterSettings();
                var propInfo = settings.GetType().GetProperty("OutputMethod");
                propInfo.SetValue(settings, System.Xml.XmlOutputMethod.Html, null);
                var stream = new System.IO.StringWriter();
                var writer = System.Xml.XmlWriter.Create(stream, settings);
    
    
              //  XmlElement elem = doc.CreateElement("book", "aaaa", "http://www.com");
              ////  doc.DocumentElement.AppendChild(elem);
              //  doc.DocumentElement.(elem, doc.DocumentElement.LastChild);
    
                XmlDocument doc2 = new XmlDocument();
                XmlElement element1 = doc2.CreateElement(string.Empty, "html", string.Empty);
                doc2.AppendChild(element1);
                XmlElement element2 = doc2.CreateElement(string.Empty, "head", string.Empty);
                XmlElement element4 = doc2.CreateElement(string.Empty, "title", string.Empty);
                XmlText text1 = doc2.CreateTextNode("TheHaileSelassie.Com :: "+doc.GetElementsByTagName("h1")[0].InnerText);
                element4.AppendChild(text1);
                element2.AppendChild(element4);
                doc2.DocumentElement.AppendChild(element2);
    
                XmlElement element3 = doc2.CreateElement(string.Empty, "body", string.Empty);
    
    
                XmlDocumentFragment xfrag = doc2.CreateDocumentFragment();
                xfrag.InnerXml = doc.InnerXml;
                element3.AppendChild(xfrag);
                doc2.DocumentElement.AppendChild(element3);
    
                //doc2.DocumentElement.AppendChild(xfrag);
    
                doc2.Save(writer);
                return Content(System.Net.WebUtility.HtmlDecode(stream.ToString()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 2013-05-31
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多