2010-04-29 13 views
5

मैं अपनी वेबसाइटों पर एसईओ पठनीयता को अनुकूलित करने की कोशिश कर रहा हूं और एक मुद्दा जो मैंने पार किया है वह है ASP.NET मेरे मास्टरपेज के शीर्षक तत्व को कुचलने वाला है। मेरे masterpage में इस तरह के रूप में प्रवेश किया (स्वयं <% %> टैग की वजह से लाइन ब्रेक दूर करने के लिए पुन: स्वरूपित):शीर्षक तत्व में एएसपी.नेट लाइन ब्रेक

<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /> - <%=WebsiteSettings.WebsiteName %></title> 

यह वह जगह है उत्पादन मैं प्राप्त करते हैं:

<title> 
    Home 
- Website Name</title> 

आप देख ASP.NET जोड़ रहा है सकते हैं लाइन ब्रेक से पहले और पीछे की ओर जहां <asp:ContentPlaceHolder /> विकल्प स्ट्राइक स्टूडियो ऑटो-फॉर्मेट <asp:Content /> को लाइन ब्रेक के साथ शुरू करने और समाप्त करने के लिए विकल्प है। जाहिर है, इसे विजुअल स्टूडियो स्वरूपण विकल्पों में रोका जा सकता है, लेकिन यह आदर्श नहीं है क्योंकि मैं केवल उस सामग्री को शीर्षक सामग्री प्लेसहोल्डर के लिए हटाना चाहता हूं, बाकी नहीं।

क्या कोई तरीका है कि मैं यह सुनिश्चित कर सकता हूं कि मेरा शीर्षक इसे प्रस्तुत करने से पहले छंटनी हो? मैं एमवीसी का उपयोग कर रहा हूं इसलिए कोड-बैक स्वीकार्य विकल्प नहीं है।

+3

क्या इससे वाकई कोई फर्क पड़ता है? एचटीएमएल में व्हाइटस्पेस महत्वपूर्ण नहीं है और मुझे संदेह है कि किसी भी गंभीर खोज इंजन पार्सर को यह एक समस्या होगी। –

उत्तर

2

निम्नलिखित आप kee के लिए अनुमति चाहिए कोड कॉपी और पेस्ट करने से पी।

विकल्प 1

के बाद से अपने MVC इस तरह एक HTML हेल्पर बनाने का उपयोग कर:

namespace [ProjectName].Web.Views 
{ 
    public static class HtmlHelpers   
    { 
      public static MvcHtmlString GetFullPageTitle(this HtmlHelper helper, string PageTitle) 
      { 
       return MvcHtmlString.Create(PageTitle + " - " + WebsiteSettings.WebsiteName) 
      } 
    } 
} 

अब आप अपने मास्टर पृष्ठ में सिर्फ इस

<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 

डाल तो में अपने पृष्ठों का उपयोग यह

<asp:Content ID="PageTitleContent" ContentPlaceHolderID="TitleConent" runat="server"> 
    <%=Html.GetFullPageTitle("Some PageTitle")%> 
</asp:Content> 

विकल्प 2

नोट: यदि आप अपने कार्य में डाटा को पॉप्युलेट तो आप न कभी पेज में जोड़ने के लिए है।

तो जैसा:

public ActionResult myAction() 
{ 
    ViewData["Title"] = "MyActionTitle"; 
    return View() 
} 
फिर अपने मास्टर पेज में

आप बस निम्नलिखित

<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /><%= ViewData["Title"] + "-" + WebsiteSettings.WebsiteName %></asp:ContentPlaceHolder></title> 

इस बारे में अच्छी बात है अगर आप चाहते थे रद्द कर सकते थे क्या शीर्षक में कहते हैं क्या करना होगा प्रत्येक पृष्ठ यह

<asp:Content ID="PageTitleContent" ContentPlaceHolderID="TitleConent" runat="server"> 
     My Override Title 
    </asp:Content> 
+0

मुझे यह समाधान पसंद है, हालांकि मैं इसे शीर्ष डाउन दृष्टिकोण में लागू नहीं कर सकता हूं जिसे मैं ढूंढ रहा था। वास्तव में यह परिवर्तन लगभग 10 साइटों पर किया जाना चाहिए, इसलिए मैं इसे सामग्री पृष्ठों के साथ जितना संभव हो उतना छोटा संपर्क करना चाहता हूं। –

+0

नाथन मेरे संशोधनों को देखते हैं, दूसरी विधि आपको बस अपने नियंत्रक कार्यों के माध्यम से चलाने की अनुमति देगी और दृश्य को वापस करने वाली प्रत्येक क्रिया के लिए व्यूडाटा ["शीर्षक"] = "कुछ" जोड़ देगा। आप इस खोज को –

+0

के लिए खोज और प्रतिस्थापित कर सकते हैं, मुझे दूसरा दृष्टिकोण पसंद है। अच्छा लगा। आज बाद में कुछ बेहतर हो रहा है, मैं इसे स्वीकार करूंगा। :) –

0

आप एक शाब्दिक नियंत्रण का प्रयास कर सकते हैं, हालांकि मुझे संदेह है कि एएसपीनेट फॉर्म के बाहर दस्तावेज़ शीर्षलेख में काम नहीं करेगा। आप शीर्षक-कोड के माध्यम से शीर्षक सेट करने का भी प्रयास कर सकते हैं।

1

तुम सच में परेशान कर रहे हैं (और मैं नहीं दिख रहा है तुम क्यों दी जाएगी खाली स्थान के HTML में महत्वपूर्ण नहीं है) आप इस तरह कोड-पीछे कुछ में यह स्थापित करने की कोशिश कर सकते:

Page.Title = WebsiteSettings.WebsiteName + " " + Page.Title; 
+0

कृपया मेरे प्रश्न की अंतिम वाक्य ध्यान दें: मैं एमवीसी का उपयोग कर रहा हूं इसलिए कोड-बैक स्वीकार्य विकल्प नहीं है। –

+0

क्षमा करें, उस भाग को याद किया - अनदेखा करें। –

1

नियमित अभिव्यक्तियों का उपयोग करके, जैसा कि डग्रे ने कहा, सुरक्षित है टी और सबसे आसान दृष्टिकोण।

यह कोड केवल प्रथम शीर्षक टैग में न्यूलाइन/वर्णों की पहली घटना को प्रतिस्थापित करता है।

void TrimTitleRegex(ref string content) 
{ 
    System.Text.RegularExpressions.Regex rgx = new System.Text.RegularExpressions.Regex(@"\<title\>(.*?)\<\/title\>"); 
    var result = rgx.Replace(content, 
    m => 
    { 
     var codeString = m.Groups[1].Value; 
     // then you have to evaluate this string 
     codeString = System.Text.RegularExpressions.Regex.Replace(codeString, @"\r\n?|\n", ""); 
     codeString = String.Format("<title>{0}</title>", codeString); 
     return codeString.Trim(); 
    }, 1); 

    content = result; 
} 
संबंधित मुद्दे