如何为googlebot配置ajax网站?

时间:2015-03-03 15:45:26

标签: javascript c# angularjs googlebot

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

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

我的假设是放置那个元标记,我告诉googlebot它是一个ajax网站,并且它应该在域名和网址的其余部分之间的网址中附加_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();
    }

1 个答案:

答案 0 :(得分:0)

?_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()));