2010-02-22 89 views
0

我開始寫什麼可能會成長爲一個大型的商業網站。該業務有幾個方面,所以我正在考慮一個基於'widget'的UI,與BBC主頁(http://www.bbc.co.uk)沒有什麼不同。客戶端部分頁面呈現和搜索引擎

我正在寫一個內容管理系統,允許管理員使用預先定義的小部件(即文本小部件,產品小部件,新聞標題小部件等)的選擇組成頁面。我正在使用ASP.NET MVC編寫應用程序。

每個控件類型的標記將封裝在用戶控件(ascx)中。我正在考慮兩種方式呈現小部件(我可以混合):

  1. 使用的RenderPartial打造的頁面在服務器上(很像從ASP.NET MVC網站科納樣品)

  2. 在提供的頁面上呈現窗口小部件佔位符,然後讓客戶端爲每個佔位符發出請求(使用jquery調用返回HTML的標準MVC操作)。

第二種方法是有吸引力的原因有兩個:

  1. 它允許一個頁面,而無需等待緩慢渲染的控件返回(如評論插件,也許) 。

  2. 它允許我在控件級別(而不是頁面級別)控制緩存。我可以使用內置的OutputCache屬性來單獨控制每種控件類型的緩存類型。

這裏的問題:

如果某些頁面的內容僅由JavaScript發起HTTP GET請求呈現(即不包括在初始響應),將這個內容是包含在Google的頁面評估/索引中?

假設JavaScript的請求上的document.ready

對於那些誰喜歡代碼觸發時,我的原型實現使用此代碼在服務器的第二種方法:

[OutputCache(Duration = 30, VaryByParam = "widgetUniqueKey")] 
    public ActionResult RenderWidget(int widgetId) 
    { 
     var cmsService = new CmsService(); 
     var widget = cmsService.GetWidget(widgetId); 

     string viewName = widget.Accept(new ViewNameWidgetVisitor()); 
     object viewData = widget.Accept(new ViewDataWidgetVisitor()); 

     return View(viewName, viewData); 
    } 

與此代碼在客戶端(初始頁面GET已返回佔位符div)

$('.widgetPlaceholder').each(function() { renderWidget(this) }); 

    function renderWidget(source) { 
     var placeholder = $(source); 
     var widgetId = placeholder.attr('id').replace("widget", ""); 
     var widgetUniqueKey = placeholder.children('div.uniqueId').text(); 

     $.get('/home/RenderWidget', { 
      widgetId: widgetId, 
      widgetUniqueKey: widgetUniqueKey 
     }, 
        function(data) { 
         placeholder.replaceWith(data); 
        }, "html" 
       ); 
    } 

widgetUniqueKey將根據窗口小部件類型的不同而不同:它可能是產品窗口小部件的產品ID;推薦小部件的用戶標識;等

非常感謝

回答

1

號的谷歌機器人(而據我所知的任何其他索引)不執行任何JavaScript代碼,讓你通過AJAX獲取任何東西不會被索引。

+0

謝謝,這是非常有用的知道。 – sandy 2010-02-22 10:33:09