Предохранитель, не превышать количество символов для мета-заголовка и мета-описания.
Зачем нужны ограничения и счётчики символов для SEO-полей
Meta Title и Meta Description — ключевые элементы, которые поисковые системы показывают в результатах выдачи. Их длина напрямую влияет на кликабельность и восприятие вашего предложения.
- Meta Title (до 55 символов) — заголовок, который виден в поиске и на вкладке браузера. Если он обрезается, теряется смысл и снижается CTR.
- Meta Description (до 160 символов) — краткое описание под заголовком. Слишком длинное описание обрезается многоточием, что может отпугнуть пользователя.
Мы добавили в форму редактирования товара автоматические ограничители и счётчики оставшихся символов. Теперь при заполнении полей вы сразу видите остаток и не сможете случайно выйти за пределы рекомендуемой длины.
Как это работает
Для каждого поля задан лимит (55 и 160 символов соответственно). При вводе текста скрипт:
- отображает количество оставшихся символов прямо под полем;
- автоматически обрезает лишнее, если лимит превышен.
Никаких дополнительных настроек — просто заполняете форму, и система сама следит за оптимальной длиной. Это помогает создавать более качественные сниппеты без ручной проверки каждого символа.
в шаблоне старый код меняем на новый:
<div class="col-12 js-chars-limit-block">
<label for="marketMetaTitle" class="form-label fw-semibold">{PHP.L.market_metatitle}</label>
<div class="input-group has-validation">
{MARKETEDIT_FORM_METATITLE}
</div>
<div class="form-text text-end">
<span class="text-muted small js-chars-counter" data-limit="55"></span>
</div>
</div>
<div class="col-12 js-chars-limit-block">
<label for="marketMetaDesc" class="form-label fw-semibold">{PHP.L.market_metadesc}</label>
<div class="input-group has-validation">
{MARKETEDIT_FORM_METADESC}
</div>
<div class="form-text text-end">
<span class="text-muted small js-chars-counter" data-limit="160"></span>
</div>
</div>
и в конец шаблона, перед закрывающим шаблон, XTemplate-блоком <!-- END: MAIN --> вставить скрипт:
<script>
document.addEventListener('DOMContentLoaded', function() {
// Для каждого блока с js-chars-limit-block
document.querySelectorAll('.js-chars-limit-block').forEach(function(block) {
// Найти первое поле ввода или textarea внутри этого блока
const field = block.querySelector('input, textarea');
// Найти счётчик внутри этого же блока
const counter = block.querySelector('.js-chars-counter');
if (!field || !counter) return;
const limit = parseInt(counter.getAttribute('data-limit'), 10);
function update() {
let val = field.value;
if (val.length > limit) {
field.value = val.substring(0, limit);
}
const remaining = limit - field.value.length;
counter.textContent = 'Осталось: ' + remaining + ' симв.';
}
field.addEventListener('input', update);
update(); // начальное значение
});
});
</script>