- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как удалить плохие SEO-ссылки и очистить ссылочную массу сайта
Применяем отклонение ссылок
Сервис Rookee
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
можно и не делать
Можно, я согласен. Но ещё хуже костылить таблицу со строками в основной таблице, и дополнительными переводами в другой.
Это тупиковая ветвь, проще отдельным запросом даже чем джоином вытащить сразу все поля товара с переводом вместо того чтобы делать миллион джоинов под каждое переводимое поле, свойство, характеристику, метатэг и так далее
Ну так я про это и говорю. Если у вас есть нормально задизайненная таблицы с M:M и O:M связями, без денормализации которую вы сделали на ровном месте, то для выборки локаленезависимых данных, вам нужно будет сделать запрос `SELECT * FROM product WHERE id = ?`, а для локалезависимых - `SELECT * FROM product_l10n WHERE product_id = ?`, и не надо городить логику для выборки строк из основной таблицы, или из дополнительной. Меньше кода - меньше багов.
Ну и много вы знаете топовых российских ритейлеров у кого можно переключить язык?
Российских - не знаю. Но я из Украины, откройте любой сайт, rozetka.ua, 27.ua, у всех лидеров есть две версии сайта. В данном контексте, это может и не важно, но раз зашла речь за интренационализацию и локализацию, то это не такая ненужная штука как может показаться на первый взгляд.
раз зашла речь за интренационализацию и локализацию, то это не такая ненужная штука как может показаться на первый взгляд.
Зависит от магазина.
Некоторым магазинам достаточно перевести интерфейс и названия товаров. Тут можно даже не заморачиваться с внесением изменений по многоязычности в движок, все выполняется внешенй оберткой на выдаче.
Некоторые магазины сильно таргетируются под целевую аудиторию с учетом ее языка. Там опять же можно не заморачиваться с внесением изменений по многоязычности в движок, т.к. будет различаться абсолютно все - ассортимент, цены, скидки, процедура регистрации, дизайн, методы оплаты, персонал сайта - просто поставят второй движок рядом.
Настоящая многоязычность нужна или очень крупным агрегаторам типа ебея и амазона, либо совсем никаким магазинам типа вася продает два мопеда.
Российских - не знаю. Но я из Украины, откройте любой сайт, rozetka.ua, 27.ua, у всех лидеров есть две версии сайта. В данном контексте, это может и не важно, но раз зашла речь за интренационализацию и локализацию, то это не такая ненужная штука как может показаться на первый взгляд.
У вас просто несколько языков в стране, и часть людей знает только один из. Тут с вами я согласен, в вашем случае оно действительно оправдано было бы, но это специфика вашей страны. В России никто локализацию не делает, так как не имеет никакого смысла в рамках продаж екоммерса. буть то озон или вайлдбериес или кто либо еще из онлайн гипермаркетов, в нашем случае непонятно на какой язык еще можно перевести, так как сильно большая часть население не знает никакого кроме русского и все 100% знают русский
У вас просто несколько языков в стране, и часть людей знает только один из. Тут с вами я согласен, в вашем случае оно действительно оправдано было бы, но это специфика вашей страны. В России никто локализацию не делает, так как не имеет никакого смысла в рамках продаж екоммерса. буть то озон или вайлдбериес или кто либо еще из онлайн гипермаркетов, в нашем случае непонятно на какой язык еще можно перевести, так как сильно большая часть население не знает никакого кроме русского и все 100% знают русский
Делают. Дальний восток делает дубляж на китайский, питер эстонский и финский делают. Правда это при условии специфичного ассортимента.
вам нужно будет сделать запрос `SELECT * FROM product WHERE id = ?`, а для локалезависимых - `SELECT * FROM product_l10n WHERE product_id = ?`
Во втором product_id не примари. Ну или еще и локаль видимо должна фигурировать.
2 товара в одном из 1с зашли en, es, ru. Во втором только ru
В целом - монга хороша для таких задач. Постгре, говорят тип json тоже сейчас имеет - тогда это идеальный вариант.
За опенкарт не топлю, только идиот будет в 2к20 делать магазин на опенкарте, тем более на 100к товаров и с бюджетом 20+ тысяч долларов.
Опенкарт для малого бизнеса (но и 100к товаров тянет спокойно, и даже 1м), Битрикс для лохов. Для фреймов бюджет может быть маловат, и доработки дороговаты, а еще сроки могут затянуться.
Никак ничего конкретного не посоветуешь, когда вводных так мало. Может ему и ВП, сделанного за недельку, за глаза будет, и на долгие годы хватит. А может php/mysql в любой обертке ни в коем случае рассматривать нельзя.
Битрикс для лохов.
Спасибо, о учитель за столь сокровенное знание что Вы нам открыли.
Во втором product_id не примари.
Да, там надо сделать PRIMARY KEY (product_id, iso_code), чтобы выборки по WHERE product_id = ? AND iso_code = ? выполнялись быстро. В той же кассандре например, можно объявить partition key и clustering key по разному. Например, чтобы все локали товаров лежали на одной ноде, можно сделать так: PRIMARY KEY ((product_id), iso_code), тогда выбор ноды будет происходить по product_id, а внутри конкретной партиции данные будут отсортированы по iso_code.
У меня вообще все проекты сделаны так: в урле всегда присутствует ID, причем в большинстве случаев это uuid, например:
`/ru/product/nike-boost-1911@1b3e4648-6099-4e60-8258-6f5ca13e95b9`.
ЧПУ в данной ссылке только для юзеров и поисковых ботов, нам нужно использовать все что после символа @.
Я использую uuid потому что нет синхронизации между счетчиками, не нужно париться с оффсетами/гепами между сиквенс генераторами, и под этот тип данных в СУБД всегда есть эффективный дата-тайп, для эффективного хранения. Это такой себе conflict-free identificator. Можно использовать и числовые, они не такие громоздкие, но я привык работать с uuidами.
У uuidов есть ещё большое преимущество: чтобы создать товар, нам нужно его сохранить в базу, получить ID, после, мы можем этот ID мы используем при добавлении товар в категорию, при добавлении фото товаров, т.е. по сути, мы не можем сохранить товар со всеми его фотками и категориями, пока не получим ID товара. С uuidами такой фигни нет, мы просто генерируем рандомный uuid, и сразу можем вставлять и сам товар, и фотки к нему, и все данные.
У числовых есть свои профиты, например по номеру id можно сортировать, натуральная кластеризация, и т.д.
Имея только ID, мы можем выполнить следующие запросы, и все из них параллельно:
По мере выполнения запросов, мы просто мёрджим их в объект, когда все из них выполнились (или например, не все, а какая-то часть) - мы отдаём готовый объект.
А есть хоть 1 живой пример крупного функционального интернет-магазина на просторах СНГ на Opencart, Wordpress и т д ?
На ВП напр
https://www.tarox.co.uk/shop/
https://ecodrift.ru/
https://medknigaservis.ru/
https://tentorium.ru/internet-magazin/
http://atlanticexpress.com.ua/
https://dobriyortoped.ru/
https://akb-moscow.ru/
Не 100к товаров, но кол-во, как правильно говорили выше, значения не имеет. А вот запросы и трафик - это да.
По внутренностям там я думаю есть все связи - и со складами и с бухгалтерией и может даже с СРМ.
Ида. не движок надо выбирать, а исполнителей (с).
У меня вообще все проекты сделаны так: в урле всегда присутствует ID
Похожую тактику юзаю, c той лишь разницей, что ид - хеш от урла. Почему то не нравится ИД в урлах:(
Здесь, в отличии от рандомного (uuid -v 4) или основанного на времени (v1) все же приходится, для сборки обвеса документа использовать (урл админ может изменить и соотв. урл_ид) ид генерируемый базой или второй uid. Что накладывает, в случае автоинкрементного, ограничение на использование REPLACE/INSERT OR REPLACE, но я и так не юзаю эти команды.
Ну, или, при изменении урла/урл_ид менять все урл_ид в связанных хранилищах, что несколько муторно
В моем случае достаточно простой хеш.
Над переходом к чему то типа
уже не первый раз задумываюсь.
Зы: Идею с хранением дополнительного параметра в урле спикрал :)