Readable URLs improve click-through rates in search results, simplify navigation, and help search engines understand a page's topic. This article covers how to create SEO-friendly URLs: Cyrillic transliteration, slug generation, common mistakes, and tools.
For transliteration and slug generation, use the reChecker transliteration tool. To analyze keywords in URLs, use the reChecker keyword analyzer.
Why readable URLs matter
SEO benefits
- Keywords — URLs contribute to rankings; relevant words in the path strengthen the signal
- Click-through rate — clear links inspire more trust in search snippets
- Anchor text — when a link is copied, the URL itself can serve as a page description
- Sharing — short, readable links are easier to share on social media and in messaging apps
Examples
| Bad | Good |
|---|---|
| /page?id=12345 | /kupit-iphone-15 |
| /category/42 | /smartfony-apple |
| /%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3 | /katalog |
Cyrillic transliteration
Cyrillic characters in URLs create long percent-encoded sequences. Transliteration into Latin characters makes URLs shorter and more readable.
Transliteration table (GOST 7.79-2000, type B)
| Cyrillic | Latin |
|---|---|
| а, б, в, г, д, е, ё, ж, з | a, b, v, g, d, e, e, zh, z |
| и, й, к, л, м, н, о, п | i, y, k, l, m, n, o, p |
| р, с, т, у, ф, х, ц, ч, ш, щ | r, s, t, u, f, h, ts, ch, sh, shch |
| ъ, ы, ь, э, ю, я | "", y, "", e, yu, ya |
Variations: “ё” → e or yo; “й” at the end of a word → y or i. Consistency across the site is important.
Programmatic implementation
const translitMap = {
'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'e',
'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'y', 'к': 'k', 'л': 'l', 'м': 'm',
'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u',
'ф': 'f', 'х': 'h', 'ц': 'ts', 'ч': 'ch', 'ш': 'sh', 'щ': 'shch',
'ъ': '', 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya'
};
function transliterate(str) {
return str.toLowerCase().split('').map(char =>
translitMap[char] || char
).join('');
}For production, use a library (for example, transliteration) or reChecker transliteration.
Slug generation
A slug is the part of a URL that identifies a page. It is usually generated from the title.
Rules
- Latin letters, digits, and hyphens only — no spaces, underscores, or special characters
- Lowercase — for consistency and to avoid duplicates caused by letter case
- Hyphens between words —
kupit-iphone, notkupitiphone - Remove stop words — optional: “how,” “what,” and “for” are often omitted for brevity
- Limit the length — 3–5 words, 50–60 characters
Algorithm
function slugify(title) {
return transliterate(title)
.replace(/[^a-z0-9\s-]/g, '') // только буквы, цифры, пробелы, дефисы
.replace(/\s+/g, '-') // пробелы в дефисы
.replace(/-+/g, '-') // множественные дефисы в один
.replace(/^-|-$/g, ''); // убрать дефисы с краёв
}
slugify('Как купить iPhone 15 Pro');
// "kak-kupit-iphone-15-pro"Shortening a slug
For long titles, you can truncate the slug to N words or characters:
function shortSlug(title, maxWords = 5) {
const words = slugify(title).split('-');
return words.slice(0, maxWords).join('-');
}Slug uniqueness
In a database, a slug should be unique within its section (category or content type). If there is a collision, add a suffix:
// slug: "kupit-iphone"
// коллизия → "kupit-iphone-2" или "kupit-iphone-abc12"An alternative is to add a numeric ID: /post/12345/kupit-iphone. The number guarantees uniqueness; the words make the slug readable.
Stop words
Removing stop words shortens URLs, but can reduce relevance. Recommendation: remove only clearly unnecessary words (“and,” “in,” “on,” “with”) and keep meaningful ones (“how,” “buy,” “make”).
| Remove | Keep |
|---|---|
| и, в, на, с, к, по, для | как, купить, сделать, лучший |
Redirects when changing a URL
When changing a slug, set up a 301 redirect from the old URL to the new one. Otherwise, link equity is lost and 404 may occur.
/kupit-iphone-14 → 301 → /kupit-iphone-15Multilingual websites
For hreflang, use different slugs for each language or use subdomains/paths:
/en/buy-iphone-15
/ru/kupit-iphone-15Consistency of structure is more important than a literal translation of the slug.
Practical recommendations
- Keywords — include the main keyword in the slug; check keyword density with the reChecker keyword analyzer
- Consistency — choose one transliteration scheme and stick to it
- Length — 3–5 words; avoid overloaded URLs
- Numbers — IDs at the end are acceptable:
/blog/12345/seo-guide - Canonical URLs — when content is duplicated, set the canonical to the preferred version
The transliteration and keyword analysis tools on reChecker help you quickly generate and check SEO-friendly slugs.
Handling numbers and special characters
Numbers are acceptable in slugs and are often useful (versions, years, models). Remove or replace special characters (&, +, #). It is best to remove apostrophes and quotation marks. A hyphen is the only recommended word separator.
slugify('iPhone 15 Pro Max');
// "iphone-15-pro-max"Soft and hard signs
During transliteration, “ъ” and “ь” are usually omitted (represented by an empty string in the table). This shortens the slug and reflects the practice of most websites. An alternative is to replace them with " and ', respectively, but these characters are undesirable in URLs.
Redirects when changing a slug
When changing a page URL, set up a 301 redirect. In .htaccess (Apache):
RedirectMatch 301 ^/old-slug/?$ /new-slug/In Nginx:
location = /old-slug {
return 301 /new-slug/;
}Preserving link equity and preventing 404 is critical for SEO.
Nested URLs
For a category hierarchy, use nested paths: /katalog/smartfony/apple. Each segment is a separate slug. Avoid excessive nesting (more than 3–4 levels) — long URLs are harder to read and maintain.
Conflicts with reserved paths
Check that a slug does not match system paths: /admin, /api, /login, /static, etc. In the event of a collision, the page may not open or may serve the wrong content. Maintain a list of reserved slugs in the application configuration.
Automatic generation when creating content
In CMSs and admin panels, a slug is often generated automatically when the title is saved. Implement a slugify function on the backend and call it when creating or updating content. Allow manual overrides — an automatically generated slug is not always optimal. Validation: only a-z, 0-9, -; length up to 100–150 characters.
Checking a slug before publication
Before publication, check the slug with reChecker transliteration to ensure Cyrillic characters display correctly. Use the keyword analyzer for the page with the new URL — make sure the target phrase appears in the path and content.
Conclusion
SEO-friendly URLs are created through transliteration, slugification, and uniqueness checks. reChecker tools speed up slug generation and validation before publication.