Author:
    Creation:2024-08-11Last update:2025-06-29

    рдкреНрд░рд▓реЗрдЦрди: intlayer рдореЗрдВ getLocalizedUrl рдлрд╝рдВрдХреНрд╢рди

    рд╡рд┐рд╡рд░рдг

    getLocalizedUrl рдлрд╝рдВрдХреНрд╢рди рджрд┐рдП рдЧрдП URL рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ locale рдХреЗ рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рдХрд░рдХреЗ рдПрдХ localized URL рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ absolute рдФрд░ relative рджреЛрдиреЛрдВ URLs рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рд╣реА locale prefix configuration рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

    рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

    • рдХреЗрд╡рд▓ 2 parameters рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ: url рдФрд░ currentLocale
    • locales, defaultLocale, рдФрд░ mode рдХреЗ рд╕рд╛рде optional options object
    • рдЕрдкрдиреА project рдХреА internationalization configuration рдХреЛ defaults рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
    • рд╕рд░рд▓ cases рдХреЗ рд▓рд┐рдП minimal parameters рдХреЗ рд╕рд╛рде рдпрд╛ complex scenarios рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ customized рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
    • рдХрдИ routing modes рдХреЛ support рдХрд░рддрд╛ рд╣реИ: prefix-no-default, prefix-all, no-prefix, рдФрд░ search-params

    рд╡рд┐рд╡рд░рдг

    getLocalizedUrl рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓реЛрдХрд▓ рдХреЗ рд╕рд╛рде рджрд┐рдП рдЧрдП URL рдХреЗ рдЖрдЧреЗ рд▓реЛрдХрд▓рд╛рдЗрдЬрд╝реНрдб URL рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреВрд░реНрдг (absolute) рдФрд░ рд╕рд╛рдкреЗрдХреНрд╖ (relative) рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ URL рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╣реА рд▓реЛрдХрд▓ рдЙрдкрд╕рд░реНрдЧ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


    рдкреИрд░рд╛рдореАрдЯрд░

    рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░

    • url: string

      • Description: рдореВрд▓ URL string рдЬрд┐рд╕реЗ locale рдХреЗ рд╕рд╛рде prefix рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред
      • Type: string
      • Required: Yes
    • currentLocale: Locales

      • Description: рд╡рд░реНрддрдорд╛рди locale рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП URL рдХреЛ localize рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
      • Type: Locales
      • Required: Yes

    Optional Parameters

    • options?: object

      • Description: URL localization рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП Configuration objectред
      • Type: object
      • Required: No (Optional)

      • options.locales?: Locales[]

        • Description: рд╕рдорд░реНрдерд┐рдд locales рдХрд╛ Arrayред рдпрджрд┐ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ project configuration рд╕реЗ configured locales рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
        • Type: Locales[]
        • Default: Project Configuration
      • options.defaultLocale?: Locales

        • Description: Application рдХреЗ рд▓рд┐рдП default localeред рдпрджрд┐ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ project configuration рд╕реЗ configured default locale рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
        • Type: Locales
        • Default: Project Configuration
      • options.mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'

        • Description: Locale handling рдХреЗ рд▓рд┐рдП URL routing modeред рдпрджрд┐ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ project configuration рд╕реЗ configured mode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
        • Type: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'
        • Default: Project Configuration
        • Modes:
          • prefix-no-default: Default locale рдХреЗ рд▓рд┐рдП рдХреЛрдИ prefix рдирд╣реАрдВ, рд╕рднреА рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП prefix
          • prefix-all: Default рд╕рд╣рд┐рдд рд╕рднреА locales рдХреЗ рд▓рд┐рдП prefix
          • no-prefix: URL рдореЗрдВ рдХреЛрдИ locale prefix рдирд╣реАрдВ
          • search-params: Locale рдХреЗ рд▓рд┐рдП query parameters рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ?locale=fr)

    рд░рд┐рдЯрд░реНрдиреНрд╕

    • рдкреНрд░рдХрд╛рд░: string
    • рд╡рд┐рд╡рд░рдг: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓реЛрдХрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдпрдХреГрдд URLред

    рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ

    рдмреБрдирд┐рдпрд╛рджреА рдЙрдкрдпреЛрдЧ (рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░)

    рдЬрдм рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

    typescript
    import { getLocalizedUrl, Locales } from "intlayer";
    
    // рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ locales, defaultLocale, рдФрд░ mode рдХреЗ рд▓рд┐рдП
    getLocalizedUrl("/about", Locales.FRENCH);
    // рдЖрдЙрдЯрдкреБрдЯ: "/fr/about" (рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдлреНрд░реЗрдВрдЪ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдФрд░ mode 'prefix-no-default' рд╣реИ)
    
    getLocalizedUrl("/about", Locales.ENGLISH);
    // рдЖрдЙрдЯрдкреБрдЯ: "/about" рдпрд╛ "/en/about" (рдЖрдкрдХреА mode рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░)
    

    Advanced Usage (With Optional Parameters)

    рдЖрдк optional options parameter рдкреНрд░рджрд╛рди рдХрд░рдХреЗ default configuration рдХреЛ override рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

    Relative URLs (All Options Specified)

    typescript
    import { getLocalizedUrl, Locales } from "intlayer";
    
    // рд╕рднреА optional parameters рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рдирд╛
    getLocalizedUrl("/about", Locales.FRENCH, {
      locales: [Locales.ENGLISH, Locales.FRENCH],
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-no-default",
    });
    // Output: "/fr/about" French locale рдХреЗ рд▓рд┐рдП
    
    getLocalizedUrl("/about", Locales.ENGLISH, {
      locales: [Locales.ENGLISH, Locales.FRENCH],
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-no-default",
    });
    // Output: "/about" рдбрд┐рдлрд╝реЙрд▓реНрдЯ (English) locale рдХреЗ рд▓рд┐рдП
    

    рд╕рд╛рдкреЗрдХреНрд╖ URL

    typescript
    import { getLocalizedUrl, Locales } from "intlayer";
    
    getLocalizedUrl(
      "/about",
      Locales.FRENCH,
      [Locales.ENGLISH, Locales.FRENCH],
      Locales.ENGLISH,
      false
    );
    
    // рдЖрдЙрдЯрдкреБрдЯ: рдлреНрд░реЗрдВрдЪ рд▓реЛрдХрд▓ рдХреЗ рд▓рд┐рдП "/fr/about"
    // рдЖрдЙрдЯрдкреБрдЯ: рдбрд┐рдлрд╝реЙрд▓реНрдЯ (рдЕрдВрдЧреНрд░реЗрдЬрд╝реА) рд▓реЛрдХрд▓ рдХреЗ рд▓рд┐рдП "/about"
    

    рдкреВрд░реНрдг URL

    typescript
    getLocalizedUrl(
      "https://example.com/about",
      Locales.FRENCH, // рд╡рд░реНрддрдорд╛рди рд▓реЛрдХрд▓
      [Locales.ENGLISH, Locales.FRENCH], // рд╕рдорд░реНрдерд┐рдд рд▓реЛрдХрд▓
      Locales.ENGLISH, // рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХрд▓
      false // рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░реАрдлрд┐рдХреНрд╕
    ); // рдЖрдЙрдЯрдкреБрдЯ: рдлреНрд░реЗрдВрдЪ рдХреЗ рд▓рд┐рдП "https://example.com/fr/about"
    
    getLocalizedUrl(
      "https://example.com/about",
      Locales.ENGLISH, // рд╡рд░реНрддрдорд╛рди рд▓реЛрдХрд▓
      [Locales.ENGLISH, Locales.FRENCH], // рд╕рдорд░реНрдерд┐рдд рд▓реЛрдХрд▓
      Locales.ENGLISH, // рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХрд▓
      false // рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░реАрдлрд┐рдХреНрд╕
    ); // рдЖрдЙрдЯрдкреБрдЯ: рдЕрдВрдЧреНрд░реЗрдЬрд╝реА рдХреЗ рд▓рд┐рдП "https://example.com/about"
    
    getLocalizedUrl(
      "https://example.com/about",
      Locales.ENGLISH, // рд╡рд░реНрддрдорд╛рди рд▓реЛрдХрд▓
      [Locales.ENGLISH, Locales.FRENCH], // рд╕рдорд░реНрдерд┐рдд рд▓реЛрдХрд▓
      Locales.ENGLISH, // рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХрд▓
      true // рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░реАрдлрд┐рдХреНрд╕
    ); // рдЖрдЙрдЯрдкреБрдЯ: рдЕрдВрдЧреНрд░реЗрдЬрд╝реА рдХреЗ рд▓рд┐рдП "https://example.com/en/about"
    

    рдЕрд╕рдорд░реНрдерд┐рдд рд▓реЛрдХрд▓

    typescript
    getLocalizedUrl(
      "/about",
      Locales.ITALIAN, // рд╡рд░реНрддрдорд╛рди рд▓реЛрдХрд▓
      [Locales.ENGLISH, Locales.FRENCH], // рд╕рдорд░реНрдерд┐рдд рд▓реЛрдХрд▓
      Locales.ENGLISH // рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХрд▓
    ); // рдЖрдЙрдЯрдкреБрдЯ: "/about" (рдЕрд╕рдорд░реНрдерд┐рдд рд▓реЛрдХрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреНрд░реАрдлрд┐рдХреНрд╕ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛)
    

    рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ

    • рдХреЛрдИ рд▓реЛрдХрд▓ рд╕реЗрдЧрдореЗрдВрдЯ рдирд╣реАрдВ:

      • рдпрджрд┐ URL рдореЗрдВ рдХреЛрдИ рд▓реЛрдХрд▓ рд╕реЗрдЧрдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреБрдХреНрдд рд▓реЛрдХрд▓ рдХреЛ рдкреНрд░реАрдлрд┐рдХреНрд╕ рдХрд░рддрд╛ рд╣реИред
    • рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХрд▓:

      • рдЬрдм prefixDefault false рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХрд▓ рдХреЗ рд▓рд┐рдП URL рдХреЛ рдкреНрд░реАрдлрд┐рдХреНрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ред
    • рдЕрд╕рдорд░реНрдерд┐рдд рд▓реЛрдХрд▓:

      • locales рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд▓реЛрдХрд▓ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХреЛрдИ рдкреНрд░реАрдлрд┐рдХреНрд╕ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ред
    • рд░рд╛рдЙрдЯрд┐рдВрдЧ рдореЛрдбреНрд╕:

      • 'prefix-no-default': рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХреЗрд▓ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЙрдкрд╕рд░реНрдЧ рдирд╣реАрдВ рд╣реИ, рдЕрдиреНрдп рдХреЗ рдкрд╛рд╕ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, /about, /fr/about)
      • 'prefix-all': рд╕рднреА рд▓реЛрдХреЗрд▓реНрд╕ рдХреЗ рдкрд╛рд╕ рдЙрдкрд╕рд░реНрдЧ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, /en/about, /fr/about)
      • 'no-prefix': URLs рдореЗрдВ рдХреЛрдИ рд▓реЛрдХреЗрд▓ рдЙрдкрд╕рд░реНрдЧ рдирд╣реАрдВ (рд▓реЛрдХреЗрд▓ рдХрд╣реАрдВ рдФрд░ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ)
      • 'search-params': рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓реЛрдХреЗрд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, /about?locale=fr)

    рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ

    рдПрдХ рдмрд╣реБрднрд╛рд╖реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ, рд╕рд╣реА рднрд╛рд╖рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП locales рдФрд░ defaultLocale рдХреЗ рд╕рд╛рде рдЕрдВрддрд░рд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдиреАрдЪреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ getLocalizedUrl рдХреЛ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗрдЯрдЕрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

    tsx
    import { Locales, type IntlayerConfig } from "intlayer";
    
    // рд╕рдорд░реНрдерд┐рдд рд▓реЛрдХрд▓ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХрд▓ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
    export default {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
        defaultLocale: Locales.ENGLISH,
      },
    } satisfies IntlayerConfig;
    
    export default config;
    

    рдЙрдкрд░реЛрдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди ENGLISH, FRENCH, рдФрд░ SPANISH рдХреЛ рд╕рдорд░реНрдерд┐рдд рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ рдФрд░ ENGLISH рдХреЛ рдлреЙрд▓рдмреИрдХ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

    рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, getLocalizedUrl рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдиреАрдпрдХреГрдд URL рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

    typescript
    getLocalizedUrl("/about", Locales.FRENCH); // рдЖрдЙрдЯрдкреБрдЯ: "/fr/about"
    getLocalizedUrl("/about", Locales.SPANISH); // рдЖрдЙрдЯрдкреБрдЯ: "/es/about"
    getLocalizedUrl("/about", Locales.ENGLISH); // рдЖрдЙрдЯрдкреБрдЯ: "/about"
    

    getLocalizedUrl рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдХреЗ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реБрд╕рдВрдЧрдд URL рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдФрд░ SEO рджреЛрдиреЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИред