Лимиты, которые реально срабатывают
| Где | Лимит | Что происходит дальше |
| --- | --- | --- |
| SMS (обычная) | 160 | Разбивается на несколько, тарифицируется отдельно |
| SMS (кириллица или emoji) | 70 | То же самое, вчетверо раньше |
| Пост в X | 280 | Отклоняется |
| og:title | ~88 | Обрезается в карточке |
| Заголовок YouTube | 100 | Отклоняется |
| Meta description | ~155 | Обрезается в выдаче |
Символы — это не байты и не кодовые единицы
Три разных числа, и формы расходятся в том, какое из них проверяют:
- Символы, которые видит читатель — то, что считается здесь
- Кодовые единицы UTF-16 — то, что возвращает
.lengthв JavaScript, а значит то, что использует большинство наивных валидаторов - Байты — то, что меряет ограничение колонки в базе
Русское предложение содержит столько же символов, сколько его латинский эквивалент, вдвое больше байт в UTF-8 и столько же кодовых единиц. Emoji — это один символ, две кодовые единицы и четыре байта. Если форма отклоняет текст, который по вашему счёту помещался, она считает одно из двух других.
Подсчёт под колонку базы данных
Если ограничение — varchar(255), вы упираетесь в байты или в символы, в
зависимости от СУБД и сопоставления. Считайте по более строгому прочтению и
оставляйте запас: упереться в лимит на вставке хуже, чем чуть недобрать.
Вопросы
Почему здесь emoji считается одним символом, а в другом месте двумя?+
Потому что большинство инструментов считает единицы UTF-16, а не символы, которые видит читатель. Emoji обычно занимает две такие единицы, а флаг или emoji с тоном кожи — четыре и больше. Здесь считается так, как посчитал бы человек, — и так, как должна считать хорошо сделанная форма.
Эти лимиты официальные?+
Это то, на чём каждая площадка обрезает или отклоняет, а оно не всегда совпадает с её справкой. Считайте их практическим ориентиром и проверяйте то, на что полагаетесь: площадки меняют лимиты без предупреждения.
SMS правда обрезается на 160?+
На 160 — для обычных символов GSM. Один символ вне этого набора (emoji, кириллическая буква, «умная» апострофа) переводит всё сообщение в другую кодировку, и лимит падает до 70. Поэтому сообщение, которое помещалось, после одной правки вдруг становится тремя.
Зачем вообще мерить meta title в символах?+
В основном незачем: Google обрезает по ширине в пикселях. Это полезно для площадок, которые действительно считают символы. Для выдачи берите [генератор meta title](/ru/t/meta-title-generator) — он меряет ширину отрисовки.