Dasturlash

Blogingizni Subdirectory’da Joylashtirish: SEO va Texnik Qadamlar

18-aprel, 2026, 02:1225 ko'rish4 daqiqa o'qish
Blogingizni Subdirectory’da Joylashtirish: SEO va Texnik Qadamlar

Ko‘plab veb‑sayt egalari blogni subdomain (blog.example.com) o‘rniga subdirectory (example.com/blog)da joylashtirishni afzal ko‘radi. Bu usul sahifa reytingini oshiradi, foydalanuvchi tajribasini yaxshilaydi va texnik jihatdan ham bir qancha afzalliklarga ega. Quyida Cloudflare, Vercel va Render kabi mashhur platformalar yordamida subdirectory’da blogni qanday ishga tushirishni bosqichma‑bosqich ko‘rib chiqamiz.

Nega Subdirectory?

Google rasmiy ravishda subdomainlarni alohida sayt deb hisoblamaydi, ammo amaliy tajribalar subdirectorylar sahifalar orasidagi authority (hukm)ni birlashtiradi. Natijada:

Host a Website on a Subdirectory with Cloudflare 1
  • Saytingizning umumiy SEO kuchi kuchayadi.
  • Yangi kontentga ko‘proq organik trafik keladi.
  • Yo‘nalish (URL) foydalanuvchilar uchun aniq va esda qoladi.

Kerakli Asboblar

Quyidagi xizmatlar misol sifatida keltirilgan, lekin boshqa provayderlar ham xuddi shunday ishlaydi:

Host a Website on a Subdirectory with Cloudflare 2
  • Cloudflare – DNS va Workers (server‑less kod) uchun.
  • Vercel – Next.js asosidagi blogni joylashtirish.
  • Render – statik asosiy sayt.

1‑qadam: Asosiy Sayt DNS‑ni Sozlash

Cloudflare boshqaruv paneliga kirib, SSL/TLS → Overview → Configure → Custom SSL/TLS → Full ni tanlang. So‘ng DNS bo‘limida CNAME yozuvlarini qo‘shing:

Host a Website on a Subdirectory with Cloudflare 3
  • @ → my-site.onrender.com (proxied)
  • www → my-site.onrender.com (proxied)
  • api → my-api.onrender.com (proxied)

Bu yozuvlar asosiy domeningizni Render‑da joylashgan saytga yo‘naltiradi.

Host a Website on a Subdirectory with Cloudflare 4

2‑qadam: Blog DNS‑ni Sozlash

Blog subdomaini (blog.example.com) allaqachon Vercel’da ishlayotgan bo‘lsa, quyidagicha CNAME qo‘shing:

Host a Website on a Subdirectory with Cloudflare 5
  • blog → cname.vercel-dns.com (proxied)

3‑qadam: Next.js Blogni Subdirectoryga Moslashtirish

Next.js konfiguratsiya faylida (next.config.js) basePath parametrini qo‘shing:

/** @type {import('next').NextConfig} */
const nextConfig = {
  basePath: "/blog",  // Add this line
  images: {
    remotePatterns: [
      {
        protocol: "https",
        hostname: "imagedelivery.net",
      },
    ],
  },
  redirects: async () => {
    return [];
  },
};

export default nextConfig;
/** @type {import('next').NextConfig} */
const nextConfig = {
  basePath: "/blog",
  images: { remotePatterns: [{ protocol: "https", hostname: "imagedelivery.net" }] },
  redirects: async () => []
};
export default nextConfig;

Bu kod blogni /blog yo‘nalishi ostida ishlashini ta’minlaydi.

// worker.js
/**
* Welcome to Cloudflare Workers! This is your first worker.
*
* - Run "npm run dev" in your terminal to start a development server
* - Open a browser tab at http://localhost:8787/ to see your worker in action
* - Run "npm run deploy" to publish your worker
*
* Learn more at https://developers.cloudflare.com/workers/
*/
export default {
  async fetch(request, env, ctx) {
    return new Response('Hello World!');
  },
};

4‑qadam: Cloudflare Worker Yaratish

Workers & Pages bo‘limiga o‘ting, Create Worker tugmasini bosib, “Hello World” shablonini tanlang. Keyin quyidagi kodni joylashtiring:

export default {
  async fetch(request, env, ctx) {
    async function MethodNotAllowed(request) {
      return new Response(`Method ${request.method} not allowed.`, {
        status: 405,
        headers: {
          Allow: "GET",
        },
      });
    }
    // Only GET requests work with this proxy.
    if (request.method !== "GET") return MethodNotAllowed(request);

    // Get the URL that was just requested.
    const url = new URL(request.url);

    // Swap out the subdirectory with the subdomain to request the actual URL.
    const originUrl = url.toString().replace(
      'https://example.com/blog',
      'https://blog.example.com/blog'
    ).replace(
      'https://www.example.com/blog',
      'https://blog.example.com/blog'
    );

    // Fetch the origin.
    const originPage = await fetch(originUrl);

    // Return the subdomain, as the subdirectory.
    const newResponse = new Response(originPage.body, originPage);
    return newResponse;
  },
};
export default {
  async fetch(request) {
    if (request.method !== "GET") {
      return new Response(`Method ${request.method} not allowed.`, {status: 405, headers: {Allow: "GET"}});
    }
    const url = new URL(request.url);
    const originUrl = url.toString()
      .replace('https://example.com/blog', 'https://blog.example.com/blog')
      .replace('https://www.example.com/blog', 'https://blog.example.com/blog');
    const originResp = await fetch(originUrl);
    const resp = new Response(originResp.body, originResp);
    // Subdomain uchun noindex ni olib tashlaymiz
    resp.headers.delete('x-robots-tag');
    return resp;
  }
};

URL‑larni o‘z domeningizga moslang va “Deploy” tugmasini bosing.

5‑qadam: Worker‑ni Yo‘nalishlarga Bog‘lash

Worker Routes bo‘limida ikki yo‘nalishni qo‘shing:

  • example.com/blog* – blog‑worker
  • example.com/blog/_next/static* – blog‑worker

Endi blog example.com/blog manzilida ko‘rinadi.

6‑qadam: Robots.txt va X‑Robots‑Tag Sozlamalari

Subdomainni indekslanmasligi uchun Next.js‑da headers funksiyasini qo‘shing:

async headers() {
  return [{
    source: '/:path*',
    headers: [{key: 'X-Robots-Tag', value: 'noindex, nofollow'}]
  }];
}

Worker kodida resp.headers.delete('x-robots-tag'); qatori bu tagni subdirectory uchun olib tashlaydi.

7‑qadam: Tekshirish

Google URL Inspection vositasi bilan example.com/blog sahifasining indekslanganligini tasdiqlang. Shuningdek, brauzerning “Network” panelida X-Robots-Tag sarlavhasining yo‘qligini tekshiring.

Bu qadamlarni bajarganingizdan so‘ng, blogingiz subdirectoryda to‘liq ishlaydi, SEO foydalari maksimal darajada bo‘ladi va subdomain eski manzilida indekslanmaydi.

Manba: Hacker News
#subdirectory #subdomain #SEO #Cloudflare #Next.js
Telegram da muhokama qilish