Back to "आपको यह गूगल पर क्यों नहीं मिला (और मैं इसे कैसे स्थिर करता हूँ)"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

ASP.NET Core SEO

आपको यह गूगल पर क्यों नहीं मिला (और मैं इसे कैसे स्थिर करता हूँ)

Wednesday, 26 November 2025

मैं इस ब्लॉग को कुछ समय के लिए चला रहा है, एक सीपी पर विस्तृत तकनीकी आलेख लिख रहा है.

समस्या: Google के लिए हर पृष्ठ का चित्र

जब गूगल आपकी साइट पर चलता है, तो यह अनेक मुख्य संकेतों को समझने के लिए देखता है कि हर पृष्ठ के बारे में क्या है. मैं गूगल संकेत हर पृष्ठ के लिए भेज रहा था.

सिगरेट पीने से: स्थिर मेटा वर्णन

यहाँ मेरा क्या है _Layout.cshtml जैसा देखा गया:

<meta name="description" content="Scott Galloway is a lead developer and software engineer with a passion for building web applications.">
<meta property="og:description" content="Scott Galloway is a lead developer and software engineer with a passion for building web applications.">

मेरे लेख के बारे में एनईएसटी कोर में पृष्ठभूमि सेवाएँमेरे घर के बारे में भी यही वर्णन है. RAGCYEACKएक ही वर्णन.

Google एक ही वर्णन के साथ 200+ पृष्ठों को देखता है और सोचता है कि "इस साइट में दोहरा सामग्री विषय है" या "यह साइट उपयोगी जानकारी प्रदान करने के बारे में परवाह नहीं करता." या फिर भी, पारेर्स दुःख झेलता है.

दीर्घवृत्तीय यूआरएल गुम है

मेरे पास अलग - अलग भाषाओं का ब्लॉग है ।

  • /blog/my-article (हंगिश)
  • /blog/my-article/fr (FACKR)
  • /blog/my-article/de ( जर्मन)

इसके बिना, गूगल शायद इन्हें नक़ली सामग्री के रूप में देखे, जो कि मूल पृष्ठ पर इसे साझा करने के बजाय बहुत से यूआरएलों पर निर्भर करती हैं.

कोई स्ट्रक्चर डाटा नहीं

गूगल खोज परिणाम अमीर - लेखक सूचना दिखा सकते हैं, तारीख़, आलेख पूर्वावलोकन. लेकिन तभी यदि आप इस डाटा के उपयोग से गूगल के बारे में बताना चाहते हैं. JSON-Lडी स्ट्रक्चर डाटामैं नहीं था ..

स्थिर सामाजिक छवियों

प्रत्येक पृष्ठ ने एक ही भाग को साझा किया og:image. जबकि यह सीधे गूगल रेंजों को प्रभावित नहीं करता, यह उन दरों पर असर करता है जब आलेखों को सामाजिक मीडिया - पर साझा किया जाता है जो सगाई संकेतों के माध्यम से दिखाते हैं.

ठीक करने का तरीका

1 गतिशील मेटा वर्णन

पहला ठीक खाका क्लीनर के साथ गतिशील वर्णन बनाने के लिए किया गया था :

@{
    var currentUrl = $"https://{Context.Request.Host}{Context.Request.Path}";
    var defaultDescription = "Scott Galloway is a lead developer and software engineer with a passion for building web applications.";
    var pageDescription = ViewBag.Description as string ?? defaultDescription;
}

<!-- Canonical URL -->
<link rel="canonical" href="@currentUrl" />

<!-- Facebook Meta Tags -->
<meta property="og:url" content="@currentUrl">
<meta property="og:type" content="@(ViewBag.OgType ?? "website")">
<meta property="og:title" content="@ViewBag.Title">
<meta property="og:description" content="@pageDescription">
<meta property="og:site_name" content="mostlylucid" />

<!-- Twitter Meta Tags -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="@ViewBag.Title">
<meta name="twitter:description" content="@pageDescription">

<!-- Meta Description -->
<meta name="description" content="@pageDescription" />

<!-- Article metadata for blog posts -->
@if (ViewBag.PublishedDate != null)
{
    <meta property="article:published_time" content="@(((DateTime)ViewBag.PublishedDate).ToString("yyyy-MM-ddTHH:mm:ssZ"))" />
    <meta property="article:author" content="Scott Galloway" />
}
@if (ViewBag.Categories != null)
{
    foreach (var category in ViewBag.Categories)
    {
        <meta property="article:tag" content="@category" />
    }
}

अब खाका अनुवाद ViewBag.Description यदि नियत किया जाता है, डिफ़ॉल्ट में गिर जाता है. केनोनिकल यूआरएल को स्वचालित रूप से वर्तमान पृष्ठ यूआरएल पर सेट कर दिया जाता है.

ब्लॉग पोस्ट्स के लिए 2. स्वचलित वर्णन

हर ब्लॉग पोस्ट में विषय- वस्तु के पहले १५५ अक्षरों से इसकी विवरण तैयार किया गया है. मेरे में Post.cshtml:

@using Mostlylucid.Shared.Helpers
@model Mostlylucid.Models.Blog.BlogPostViewModel

@{
    Layout = "_Layout";
    ViewBag.Title = $"{Model.Title} ({Model.Language.ConvertCodeToLanguage()})";

    // Generate description from plain text content (first 155 chars, truncate at word boundary)
    var plainText = Model.PlainTextContent ?? "";
    var description = plainText.Length > 155
        ? plainText.Substring(0, plainText.LastIndexOf(' ', 155)) + "..."
        : plainText;
    description = description.Replace("\n", " ").Replace("\r", "").Trim();
    ViewBag.Description = description;

    // Set article metadata
    ViewBag.OgType = "article";
    ViewBag.PublishedDate = Model.PublishedDate;
    ViewBag.Categories = Model.Categories;

    // Build canonical URL (without language suffix for English)
    var canonicalUrl = Model.Language == "en"
        ? $"https://{Context.Request.Host}/blog/{Model.Slug}"
        : $"https://{Context.Request.Host}/blog/{Model.Slug}/{Model.Language}";
}

मुख्य बिन्दु यहाँ:

  1. शब्द सीमा पर छोटा करें - हम आधे में शब्दों को काटने से बचने के लिए 155 अक्षरों से पहले अंतिम जगह पाते हैं
  2. नई पंक्ति - मेटा वर्णन एकल पंक्ति होना चाहिए
  3. सेट og:type "arlele" को - सामाजिक मंचों यह एक आलेख है, कोई जेनेरिक वेब पृष्ठ नहीं
  4. मेटाडाटा - खाका में प्रवाहित तारीख़ और वर्गों को प्रकाशित किया गया है

3. JSON-Lडी स्ट्रक्चर डाटा

यह धनी के लिए बड़ा है. अपने ब्लॉग पोस्ट दृश्य में एक JSON-LD स्क्रिप्ट ब्लॉक जोड़ें:

<!-- JSON-LD Structured Data for Blog Post -->
<script type="application/ld+json">
{
    "@@context": "https://schema.org",
    "@@type": "BlogPosting",
    "headline": "@Model.Title",
    "description": "@description",
    "datePublished": "@Model.PublishedDate.ToString("yyyy-MM-ddTHH:mm:ssZ")",
    @if (Model.UpdatedDate.HasValue)
    {
        @:"dateModified": "@Model.UpdatedDate.Value.ToString("yyyy-MM-ddTHH:mm:ssZ")",
    }
    "author": {
        "@@type": "Person",
        "name": "Scott Galloway",
        "url": "https://mostlylucid.net/blog/aboutme"
    },
    "publisher": {
        "@@type": "Organization",
        "name": "mostlylucid",
        "logo": {
            "@@type": "ImageObject",
            "url": "https://mostlylucid.net/img/logo.svg"
        }
    },
    "mainEntityOfPage": {
        "@@type": "WebPage",
        "@@id": "@canonicalUrl"
    },
    "wordCount": @Model.WordCount,
    "inLanguage": "@Model.Language",
    "keywords": "@string.Join(", ", Model.Categories)",
    "image": "https://mostlylucid.net/img/social2.jpg"
}
</script>

टिप्पणी @@ बचने के लिए भाग रहे हैं @ विज़र दृश्य में चिह्न - JSON-LD उपयोग में @context और @type जिसका अर्थ है राफेर सिंटेक्स ।

यह स्ट्रक्चर डाटा गूगल बताता है:

  • यह किस प्रकार की सामग्री है (Briging)
  • जिसने लिखा, (प्रयोगियों को अधिक सीखने के लिए यूआरएल के साथ)
  • जब इसे प्रकाशित और परिवर्धित किया गया था
  • यह किस विषय को कवर करती है ( वर्ग से जारी)
  • कितना समय यह है (चीख्यता)
  • यह में क्या भाषा है

गूगल इसका उपयोग खोज परिणामों में, जिसमें लेखक जानकारी शामिल है, प्रकाशित तारीख़, और अधिक दिखाने के लिए कर सकते हैं.

4 कुंजी पृष्ठ के लिए बेजोड़ विवरण.

अपने स्थिर पृष्ठ को मत भूलना. प्रत्येक को एक अद्वितीय, संबंधित वर्णन होना चाहिए:

<!-- Home page -->
@{
    ViewBag.Title = "mostlylucid- Scott Galloway's Developer Blog";
    ViewBag.Description = "Technical blog covering ASP.NET Core, C#, Entity Framework, HTMX, Docker, and modern web development. Practical tutorials, NuGet packages, and open source projects.";
}

<!-- Blog index -->
@{
    ViewBag.Title = "Blog Posts";
    ViewBag.Description = "Technical articles on ASP.NET Core, C#, Entity Framework, Docker, and modern web development. Practical tutorials and real-world examples from a lead developer.";
}

<!-- Contact page -->
@{
    ViewBag.Title = "Contact Scott Galloway";
    ViewBag.Description = "Get in touch with Scott Galloway. Questions about ASP.NET Core, C#, web development, or collaboration opportunities? Send me a message.";
}

<!-- Search page -->
@{
    ViewBag.Title = "Search Results";
    ViewBag.Description = "Search through technical articles on ASP.NET Core, C#, Entity Framework, and web development. Find tutorials, guides, and solutions.";
}

अन्य अत्यावश्‍यक

साइटमैप

आप एक साइटमैप की जरूरत है. यहाँ एक सरल नियंत्रक है जो एक गतिशीलता उत्पन्न करता है:

public class SiteMapController(
    IBlogViewService blogViewService,
    IHttpContextAccessor httpContextAccessor) : Controller
{
    [HttpGet]
    [ResponseCache(Duration = 43200)] // Cache for 12 hours
    public async Task<IActionResult> Index()
    {
        var pages = await blogViewService.GetPosts();
        var siteUrl = $"https://{httpContextAccessor.HttpContext?.Request.Host}";

        XNamespace sitemap = "http://www.sitemaps.org/schemas/sitemap/0.9";

        var feed = new XDocument(
            new XDeclaration("1.0", "utf-8", null),
            new XElement(sitemap + "urlset",
                from page in pages
                select new XElement(sitemap + "url",
                    new XElement(sitemap + "loc", $"{siteUrl}/blog/{page.Slug}"),
                    new XElement(sitemap + "lastmod", page.PublishedDate.ToString("yyyy-MM-dd")),
                    new XElement(sitemap + "changefreq", "weekly"),
                    new XElement(sitemap + "priority", "0.8")
                )
            )
        );

        return Content(feed.ToString(), "text/xml");
    }
}

मार्ग पंजीकृत करें:

app.MapControllerRoute(
    name: "sitemap",
    pattern: "sitemap.xml",
    defaults: new { controller = "SiteMap", action = "Index" });

रोबॉट्स.xcolor

खोज इंजिन जहाँ आपकी साइटमैप है तथा चलाने के लिए क्या है :

app.MapGet("/robots.txt", async context =>
{
    var siteUrl = $"https://{context.Request.Host}";
    var robotsTxt = $"""
        User-agent: *
        Allow: /

        Sitemap: {siteUrl}/sitemap.xml
        """;

    context.Response.ContentType = "text/plain";
    await context.Response.WriteAsync(robotsTxt);
});

RSS फीड

बहुत से विकासकर्ता RSS रीडर का उपयोग करते हैं.S फ़ीड को खोजने में भी मदद करता है:

<link rel="alternate" type="application/atom+xml"
      title="RSS Feed for mostlylucid.net"
      href="https://mostlylucid.net/rss" />

छवियों के बारे में क्या?

आप प्रत्येक पोस्ट के लिए अनोखी ओजी छवियों बनाने के बारे में सोच सकते हैं. एक तकनीकी ब्लॉग के लिए, यह संभवतः प्रयास के लायक नहीं है. आपका ट्रैफिक से आता है:

  • गूगल खोज - छवि से अधिक बातें वर्णित करता है
  • RSS फीड - कोई छवि नहीं
  • हैक समाचार / रेडिट - लघुरूप रूप से दिखाई नहीं देता
  • प्रत्यक्ष लिंक - विकासकर्ता यूआरएल साझा कर रहे हैं

एक जारी चित्र सम्मान के लिए ठीक है. मनपसंद छवि बनाने वाली सामग्री, समाचार साइटों, या बाजार पृष्ठ फेसबुक और ट्विटर पर क्लिक करने के लिए।

यदि आप उन्हें बनाने के लिए चाहते हैं, तो आप इस्तेमाल कर सकते हैं छवि सुस्पष्ट (जिस के लिए मैं पहले से ही छवि प्रक्रिया के लिए उपयोग में आता हूं) जो टैम्प्लेट पर पाठ बनाने के लिए:

public async Task<string> GenerateOgImage(string title, string slug)
{
    using var image = await Image.LoadAsync("wwwroot/img/og-template.png");

    var font = SystemFonts.CreateFont("Arial", 48, FontStyle.Bold);

    image.Mutate(x => x.DrawText(
        new RichTextOptions(font)
        {
            Origin = new PointF(50, 200),
            WrappingLength = 1100
        },
        title,
        Color.White));

    var outputPath = $"wwwroot/og/{slug}.png";
    await image.SaveAsPngAsync(outputPath);
    return $"/og/{slug}.png";
}

लेकिन एक तकनीकी ब्लॉग के लिए?

अपने दक्षिणो की जाँच की जा रही है

गूगल समृद्ध परिणाम जाँच

प्रयोक्ता गूगल के समृद्ध परिणाम जाँच अपने स्ट्रक्चर डाटा को स्थापित करने के लिए. एक यूआरएल चिपकाएँ और यह आपको बताएगा कि यदि आपका JSON-LD वैध है और क्या समृद्ध परिणाम आप के लिए योग्य हैं.

पृष्ठ स्रोत देखें

सबसे आसान जांच - पृष्ठ स्रोत को देखें तथा जांच करें:

  • है <meta name="description"> इस पृष्ठ के लिए विशिष्ट?
  • वहाँ है <link rel="canonical">?
  • वहाँ है <script type="application/ld+json"> ब्लॉक?

गूगल खोज कंसोल

तैनात करने के बाद, अपनी साइटमैप आत्मसमर्पण गूगल खोज कंसोल. आप यूआरएल का भी उपयोग कर सकते हैं यह देखने के लिए कि आपका Google पृष्ठों को कैसे देखता है तथा फिर से पूछताछ कर सकते हैं.

सारांश

सुधार सीधे थे:

INV समस्याS ठीक-ठाक |---------|-----| स्थैतिक मेटा वर्णन गतिशीलता ViewBag.Description सामग्री से स्वचालितDescription Libisofs ने कोई केनोनिकल यूआरएल नही जोड़ा <link rel="canonical"> ख़ाका के लिए निस्बत कोई स्ट्रक्चर डाटा JSON-एलडी नहीं है BlogPosting प्रत्येक प्रेषण पर स्कीमा करें ATAL मेटाडेटा मेटाडाटा को मेटाडाटा गुम है article:published_time, article:author, article:tag मेटा टैग यूनिडायरेक्शनल स्थैतिक पृष्ठ वर्णन करता है घर, ब्लॉग, संपर्क, खोजें पृष्ठ “%s” के लिए

मुख्य अन्तर्दृष्टि: गूगल आपका दिमाग नहीं पढ़ सकता हैGoogle क्या हर पृष्ठ के बारे में एक ही विवरण है, गूगल के पास पता करने के लिए कोई रास्ता नहीं है कि क्या हर पृष्ठ के बारे में अद्वितीय और मूल्यवान बनाता है. गूगल बताओ कि हर पृष्ठ के बारे में क्या है, और आप बेहतर हो जाएगा.

यह Google के लिए कुछ सप्ताह दे अपनी साइट को फिर से बनाने के लिए, और आप सुधार देखना चाहिए. सीओ एक लंबे खेल है, लेकिन ये बुनियादी चीज़ें आधार हैं जो दूसरे उत्पादन पर बनाता है.

आगे पढ़ा जा रहा है

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.