Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как изменять фалы которые находятся в vendor?

Лучший ответ:
Верстку можно изменить через темы: 
www.yiiframework.com/doc-2.0/guide-output-theming.html
Контроллеры через controllerMap: 
www.yiiframework.com/doc-2.0/yii-base-module.html#...
С моделями будет сложнее. В расширении не используется dependency injection, поэтому, как уже сказали, свой форк со всеми вытекающими.

Худший ответ:
Содержимое папке vendor трогать нельзя, им рулит composer.
Ваша задача - совсем не редкость. Берете репозиторий и форкаете себе, у себя вносите любые правки и соответственно меняете подключение расширения в composer.json. Но нужно понимать, что при этом вы лишаетесь обновлений расширения в будущем.
Вопрос: На сколько хорошо Xamarin справляется с разработкой под Desktop?

Лучший ответ:
1. Xamarin это только про мобайл, исключение приложения под Mac. WPF - про windows desktop.
2. Xamarin позволяет все то же самое, что и нативные инструменты разработки. Плюс всегда можно нативные компоненты портировать.
3. Xaml только в Xamarin.Forms, в Xamarin.Native под каждую платформу свои инструменты. 
Мое мнение - вы путаете теплое с мягким. Если проекты под winodws - WPF. Нужна мобильная разработка - Xamarin. Между ними можно расшарить бизнес-логику, UI же никак не перекликается.

Худший ответ:
1. Если я разрабатываю проект только под десктоп, хватает ли средств Xamarin ? 
Логично предположить, что WPF мощнее в этом. Но меня интересует перспектива освоения Xamarin как универсального средства для всех платформ (кроме веба). 
В Xamarin Forms есть поддержка  "бэкэндов" (в терминологии XF) для WPF, GTK, MacOS. Вроде как они еще в бете, нугеты были, исходники доступны на официальном гитхабе, в официальном блоге и куче не официальных были статьи на эту тему. Попробуйте, может уже готово.Кстати, ещё довольно важный момент для меня, можно ли и там и там сделать редактор кода с подсветкой синтаксиса?
Посмотрите исходники avalon studio, оно написано на авалонии. Авалония больше заточена на десктопы, но там не нативная отрисовка UI, что, впрочем,  не минус.
Вопрос: Выдаёт ошибку ApiError: [100] One of the parameters specified was missing or invalid: random_id is a required parameter куда это random вставить?

Лучший ответ:
https://vk.com/dev/messages.send
В документации же русским языком написано, что это должен быть один из параметров запроса. И написано, для чего он нужен

Худший ответ:
vk.method("messages.send", {"peer_id": id, "message":"Привет!!!", "random_id":123456})
Параметр запроса
Вопрос: Имеет ли хозяин VPS/VDS серверов доступ к арендуемым у него ресурсам?

Лучший ответ:
Если у вас есть возможность установиться из своего образа, а не развертываться из образа провайдера, то можно использовать полное шифрование диска. В таком случае доступ к данным будет очень сильно затруднен. Единственный реальный вариант получения доступа - перехватить пароль на этапе шифрования диска, поскольку это действие, скорее всего, будет происходить через kvm принадлежащий хостеру.
В общем случае защита данных вполне возможна, особенно если это vds.

Худший ответ:
рут получить от вдс не проблема
дело одной минуты
Вопрос: Почему некоторые cms не удаляют инсталляционный файл а требуют удалить вручную?

Лучший ответ:
Пока файл выполняется он недоступен для чтения/записи.
К тому же, установка может пойти не так как планировалось. Возвращать файл установки (а в некоторых случаях целую директорию) - лишние действия.
P.S. Не используйте CMS :)

Худший ответ:
Потому что зачастую скрипт не имеет достаточных прав для удаления файлов из своего каталога.
Недаром многие CMS рекомендуют поставить права 0777 (rwxrwxrwx) на каталог upload для загрузки файлов через web-интерфейс.
Например, если php выполняется под апачем от пользователя apache:apache, а CMS заливал по FTP Вася Пупкин под пользователем vasya:wheel.
Возможна и такая конфигурация, что скрипты, загруженные пользователем vasya выполняются от его же имени.
В этом случае скрипт может удалять файлы и каталоги без дополнительных телодвижений.
Вопрос: Как запустить Console Application (.NET Core) на windows, как приложение, т.е. не через студию?

Лучший ответ:
Можно так 
dotnet publish -r win-x64 
и будет тебе Exe файл. 
https://docs.microsoft.com/en-us/dotnet/core/tools...

Худший ответ:
В cmd перешел до папки с .csproj и ввел dotnet run your-programm-name.dll
Вопрос: Как настроить pug в Webpack для многостраничной верстки?

Лучший ответ:
Если еще актуально, то можно сделать так:const fs = require('fs')
{...}
const PATHS = {
  src: path.join(__dirname, '../src'),
  dist: path.join(__dirname, '../dist'),
  assets: 'assets/'
}
{...}
const PAGES_DIR = `${PATHS.src}/${PATHS.assets}pages/`
const PAGES = fs.readdirSync(PAGES_DIR).filter(fileName => fileName.endsWith('.pug'))
{...}
module.exports = {
  {...}
  plugins: [
    {...}
    ...PAGES.map(page => new HtmlWebpackPlugin ({
      template: `${PAGES_DIR}/${page}`,
      filename: `./${page.replace(/\.pug/,'.html')}`
    }))
  ],
}

Худший ответ:
Попробуй те так:let pages = glob.sync(__dirname + '/source/pages/*.pug');
  pages.forEach(function (file) {
    let base = path.basename(file, '.pug');
    pluginsOptions.push(
      new HtmlWebpackPlugin({
        filename: './' + base + '.html',
        template: './pages/' + base + '.pug',
        inject: true
      })
    )
  });
..........
plugins: pluginsOptions
Вопрос: Как увеличить скорость wi-fi 5 ГГц?

Лучший ответ:
Скорее всего в ноутбуке у вас старый wi-fi модуль, который и 5 ghz не поддерживает. Попробуйте отключить 2.4G, если вай фай на ноуте пропал, значит так и есть. Решение - купить 5 ghz wi-fi модуль для ноута.
Также проверьте NAS и настройки фтп сервера. Вполне возможно что там стоит такое ограничение, так как из интернета на ноут вы качаете почти на макс скорости.

Худший ответ:
Скорее всего в ноутбуке у вас старый wi-fi модуль, который и 5 ghz не поддерживает. Попробуйте отключить 2.4G, если вай фай на ноуте пропал, значит так и есть. Решение - купить 5 ghz wi-fi модуль для ноута.
Также проверьте NAS и настройки фтп сервера. Вполне возможно что там стоит такое ограничение, так как из интернета на ноут вы качаете почти на макс скорости.
Вопрос: Вернуть старую версию wordpress и php?

Лучший ответ:
Во-первых, вы путаете версии движка PHP и движка WordPress. Это разные версии и их обе откатывать не нужно. Во-вторых, вероятнее всего вам вообще ничего не надо откатывать, а нужно устранить PHP Warning, то есть ошибку в коде, которая вызывает это сообщение. И хотя на первый взгляд ошибка ведет в wp-includes/blocks.php:183, в реальности наверняка она выше по стеку. Нужно смотреть все сообщение об ошибке целиком, включая Stack Trace.

Худший ответ:
найди и скачай версию https://ru.wordpress.org/download/releases/
потом вручную переустанови  - Используй принципы описанные здесь https://yandex.ru/search/?text=%D0%BA%D0%B0%D0%BA%...
Вопрос: Как реализована лента событий в популярных сервисах?

Лучший ответ:
Чем вас не устраивает первый вариант и в чём плюсы второго?
Логика подсказывает, что дублировать пост для каждого юзера, который на него подписан это абсурд.
Хотите сказать, что если я делаю пост в группу в которой 100к подписчиков, то я сразу создаю 100к записей в базе?
Количество постов в таблице постов будет больше чем в первом варианте на несколько порядков и это только замедлит выборку.
Однако, и первый способ гиганты вряд-ли используют прямо так. Постов в соцсетях и так миллиарды. Не могут они храниться в одной таблице так чтобы простой select * from posts join subscribe sub on(...) where sub.user_id=123 выдавал результат за адекватное время. 
Скорее всего там какие-то архисложные индексы строятся, какие-то умные кэши используются, база распределена так, чтобы сотня машин одновременно искала, но каждая машина в своём куске таблицы...
Не парьтесь. Делайте так как считаете нужным, но знайте, что при росте количества пользователей вам придётся ещё разок всё переписать, а при выходе на мировой уровень, скорее всего у вас уже будет команда спецов, и вы ещё пару раз всё перепишете с нуля на других технологиях.

Худший ответ:
Поищите  доклад Arsen Kostenko How Twitter Works, вот например https://www.youtube.com/watch?v=tlPkM0lxMKc
Если коротко - лента для каждого пользователя рассчитана заранее.
Но Не парьтесь. Делайте так как считаете нужным, но знайте, что при росте количества пользователей вам придётся ещё разок всё переписать, а при выходе на мировой уровень, скорее всего у вас уже будет команда спецов, и вы ещё пару раз всё перепишете с нуля на других технологиях. - 100%
Вопрос: А вы продавали или покупали что-то на интернет-аукционах?

Лучший ответ:
Пробуйте, можно найти по очень дешевым ценам.

Худший ответ:
Да там как раз этого добра навалом. Авито, Юла, Ау.
Как например https://au.ru/auction/?search=%D0%B5%D0%BB%D0%BE%D...
Вопрос: Как использовать Auth в сервис-провайдера Laravel?

Лучший ответ:
А зачем, собственно, использовать в сервис-провайдере класс Auth?
Там недоступны сессии, и уж тем более класс Auth (который на них завазян чуть более чем полностью).
Если ваша цель изначально провести определенные манипуляции с пользователем для вывода данных в view - юзайте view composer.view()->composer('*', function($view) use ($auth) {
        $currentUser = $auth->user();
        // делайте что душе угодно, и передавайте переменной во все view
        $view->with('currentUser', $currentUser);
    });

Худший ответ:
возможно ошибка в синтаксисе,используйете : https://github.com/barryvdh/laravel-ide-helper
он сам подставит все use.
Вопрос: Нет доступа к админке modx сайта после переноса сайта на хостинг(ошибка 500). Как исправить?

Лучший ответ:
0. Посмотрите логи. Возможно тут /core/cache/logs/
1. Удалите полностью всё содержимое папки /core/cache/
2. Проверьте что правильно указали подключение к бд в core/config/config.inc.php
3. Проверьте что правильно указали пути в файлах:
core/config/config.inc.php
config.core.php
connectors/config.core.php
manager/config.core.php

Худший ответ:
Скорее всего на новом хостинге чего-то не хватает. Попробуйте перед разворачиванием старой версии поставить чистую с нуля. При установке инсталер будет писать что ему не так.
Вопрос: Как изменить сортировку записей в Wordpress?

Лучший ответ:
Изменение параметров запроса до его выполнения делается на хуке pre_get_posts:function posts_default_order( $query )
{
    // Прекращаем выполнение, если это не главный запрос и мы не в админке.
    if( ! $query->is_main_query() || ! is_admin() ) {
        return;
    }

    // Значения: date/post_date, modified/post_modified.
    $query->set( 'orderby', 'date' );
    $query->set( 'order', 'DESC' );
}
add_action( 'pre_get_posts', 'posts_default_order' );

Худший ответ:

Нажми на слово ДАТА
Вопрос: Почему я не могу просто откатится в определенному коммиту в git?

Лучший ответ:
HEAD is now at - вы откатились. Но если будете комитить новые изменения, вам нужно будет создать новую ветку в этом месте, иначе куда комитить? 
Чтобы создать ветку (сразу или позже пред коммитом) используйте команду git checkout -b
Вообще стоит почитать это https://git-scm.com/book/ru/v1 Там все расписано для начинающих.

Худший ответ:
Решил первый раз вернуться к определенному месту и тут такое. Почему так все усложнено?
Когда ты перешёл через checkout на коммит, то это просто текущий указатель (HEAD) переставился на тот коммит, но вся история-то осталась той же самой. Дальше ты его переставишь куда-нибудь - и он точно так же переставится туда. А как ты запомнишь, где он был до перестановки? Он не запоминает. Поэтому он тебя предупреждает, что сделай ветку, а то при какой-нибудь перестановке потеряешь это место.
Вопрос: Видео чат на Django?

Лучший ответ:
Для видеочатов от сервера требуется:
* передавать громадные объемы данных (по сравнению с HTML)
* с минимальной задержкой
Поэтому серверная часть  - это дикий хардкор. 
Или второй вариант, когда соединение устанавливается между участниками напрямую (P2P), и вся дичь серверной части переносится на JS, в плане обработки сетевых ошибок, ошибок кодеков и вот этой всей P2P.
На хабре есть съевшие собаку ребята, у них есть бесплатный уровень использования SDK. 
А Django действительно пригодится, регистрацию делать, комнаты-пользователи-вот-это-всё.

Худший ответ:
Для видеочатов от сервера требуется:
* передавать громадные объемы данных (по сравнению с HTML)
* с минимальной задержкой
Поэтому серверная часть  - это дикий хардкор. 
Или второй вариант, когда соединение устанавливается между участниками напрямую (P2P), и вся дичь серверной части переносится на JS, в плане обработки сетевых ошибок, ошибок кодеков и вот этой всей P2P.
На хабре есть съевшие собаку ребята, у них есть бесплатный уровень использования SDK. 
А Django действительно пригодится, регистрацию делать, комнаты-пользователи-вот-это-всё.
Вопрос: Как будет с ES6?

Лучший ответ:
Можно так:
В компоненте в из которого передаете хандлер определяете его как inline arrow class function:class Parent {
  onNoteDelete = note => {
    // some stuff
  };
}
Такие функции не теряют контекст. Либо, можно забиндить хандлер в конструкторе, как посоветовали выше.
Метод render:render() {
  const { notes, onNoteDelete } = this.props; 
  
  return(
    <div className="notes-grid" ref="grid">
      {notes.map(note => (
        <Note 
          key={note.id} 
          color={note.color}
          onDelete={() => onNoteDelete(note)}
        >
          {note.text} 
        </Note>
       ))}
    </div>
  )
}
Для значений которые не переопределяются лучше использовать const, а не let. Так другие программисты будут сразу видеть, что значение не переопределяется и как следствие ваш код будет читаемей.

Худший ответ:
render() {
    let onNoteDelete = this.props.onNoteDelete; 
    return(
    <div className="notes-grid" ref="grid">
            {this.props.notes.map(note => {
             return (
                <Note 
                key={note.id} 
                color={note.color}
                onDelete={()=>onNoteDelete.bind(null, note)}> // и эта строка
                {note.text} 
                </Note>);   
            })
            }
    </div>
    )
 }
илиconstructor(props){
super(props)
this.onNoteDelete=this.onNoteDelete.bind(this)
}
Вопрос: Как наиболее простым надежным и дешевым образом обеспечить контроль за наполнением резервуара?

Лучший ответ:
Бачок для унитаза видели?

Худший ответ:
Какой период приезда на объект Вас устроит? Или хотите запитать от солнечных батарей?
Вопрос: Объект или экземпляр?

Лучший ответ:
Класс - это те буковки, которые вы видите на экране.
Представьте его как чертеж, например. А готовые объекты существуют в памяти компа во время работы программы. Представьте их как кучу какие-то штуковин, сделанных по общему чертежу.
Объекты - экземпляры класса.

Худший ответ:
да, все верно, только терминология выбрана неудачная. Под объектом понимается часть в оперативной памяти, на которую ссылаются все экземпляры созданных классов. И эта часть - методы. Стоит разделять методы и поля. под  поля у всех экземпляров выделяется отдельная память под каждое. методы это таблица виртуальных функций, если метод общий то его метаинформация описана в одном месте, в момент вызова ему прокидываются ссылки на тот или иной экземпляр. Так же устроено прототипное наследование в javascript.
upd: чтобы лучше понимать такие вещи как правило читают дисциплину организация эвм и систем, где в конечном итоге отвечаешь на вопросы:
- в какие ассемблерные инструкции превращается создание экземпляра
- как представлены данные в памяти
- что между ними общего
Вопрос: Как уменьшить время запросов?

Лучший ответ:
Общее время запросов можно сократить если скачивать данные с источника асинхронно, при помощи Thread. Здесь есть примеры: ruby-doc.com/docs/ProgrammingRuby/html/tut_threads.html
Сохранять можно по-разному. Это зависит от постановки задачи, которая не указана.
Не могу подказать как оптимизировать код поскольку он не указан.UPD
Если асинхронного скачивания недостаточно для оптимизации, то напрашивается другой способ:
вместо скачивания о складах каждый раз в экшене контроллера, особенно если их размер существеннен и сторонний API небыстро возвращает данные, лучше создать Rake task для периодического обновления данных о складах через определённый промужуток времени. Таким образом, контроллер будет брать заранее сохранённые данные из БД, экономя время на повторное скачивание данных.
Как именно сохранять данные определяется исходя из требуемой структуры данных.
Допустим, можно хранить данные в РСУБД так (если я верно понял задачу):
id | city_id (integer) | code (string/integer) | warehouse_data (text)
Помимо прочего, для часто повторяющихся запросов данные можно брать прямо с кеша. Статистику обращений можно получить путём анализа лога запросов.
Подытожив:создать Rake task, в которой нужно пройтись по всем возможным городам и кодам, сохраня данные в СУБДконтроллер будет брать готовые данные с БДкешировать данные согласно параметрам запроса. Ну и, возможно, более продвинутая часть, чтобы было совсем как по науке: Википедия: Алгоритмы кэширования 

Худший ответ:
Кэшируйте у себя информацию, периодически обновляйте из API.
Вопрос: Яндекс (pdd.yandex.ru) перешел на API2?

Лучший ответ:
Мигрировал с pdd в Connect, но проблему это не решило.
Обратился в тех.поддержку Яндекс по email: connect@support.yandex.ru
Где попросил объяснить как работать в Connect через API, например, чтобы менять ip-адрес в DNS-имени, на что получил ответ:К сожалению, в API Коннекта на данный момент отсутствует возможность управлять DNS-записями. Приношу извинения за неудобства!
Если для Вас критичен данный функционал, наши специалисты могут вернуть Ваш домен обратно в Почту для домена.
Попросил меня вернуть обратно на pdd.yandex.ru, но после возврата, API так и не заработал. 
Я вновь написал в тех.поддержку и сказал о проблеме, сказали что разберутся и вопрос передан куда надо, но по прошествии недели - тишина. Короче, я бросил это занятие и отказался от yandex.
Вывод: pdd убили, а новое еще не работает. Зачем так делать, я не понимаю.
Написал сюда, может кому будет интересно.
Тему закрываю.
-------------------------------------------
Прошло 2 недели после прошлого сообщения от Яндекса, и неожиданно пришел новый ответ от Яндекса, что нужно:
"Чтобы получить доступ к  API, пожалуйста, получите новый токен."
Удалил старый токен и создал новый, все заработало.
PS. Очень долго отвечают.
24.07.2018
---------------------------------
Прошло 4 месяца, при попытке зарегистрировать новый домен на pdd, сайт перекидывает на коннект.
Написал в тех.поддержку, чтобы уточнить что за дела. Мне ответили.
PS. Что интересно, что ответили в тот же день, ну дела ))
Ответ от тех.поддержки Яндекса:
Подключать новые домены к Почте для домена действительно уже нельзя. Сейчас есть возможность подключиться только к сервису Коннект. 
Разработчики сервиса знают о пожелании пользователей добавить возможность редактировать DNS в API Коннекта и работают над этим. Конкретных сроков появления этой функции мы, увы, пока назвать не можем.

Худший ответ:
https://github.com/Yukioru/yandex-connect-ddns
Кто-то пробовал?
Вопрос: Есть ли cms интернет магазина, у которой товар выставляется на определенное время?

Лучший ответ:
в битриксе есть активность элемента

Худший ответ:
Вообще, я думаю, что такое есть у многих магазинов.
Я пользуюсь Webasyst Shop-Script 7, есть дополнение для него. Плагин позволяет устанавливать даты, в которых указано с какой даты и по какую дату, товар будет доступен для покупки и будет виден на витрине. Если товар не входит в свои даты продаж, то он автоматически скрывается и купить его нельзя. Поддерживается импорт/экспорт через CSV.
Вопрос: C# — Как удалить символ из строки при посимвольной обработке строки в цикле?

Лучший ответ:
Исходную строку не трогать, а формировать новую посимвольно. Удаляемые символы можно отмечать булевыми флажками (переменными). То бишь, пока помечено флажком, пропускать, не копируя символы в целевую строку.

Худший ответ:
Проще всего использовать регулярные выражения, если это допустимо:string value = "ab+0.1973-1.1";
string result = Regex.Replace(value, @"(\.\d{2})\d+", "$1");
Если использовать цикл, то нужно создавать новую строку, но вместо string лучше использовать StringBuilder, т.к. при добавлении данных к string строка постоянно будет пересоздаваться, что в конечном итоге может негативно отразиться на производительности:string inputString = "ab+0.1973-1.1";
var result = new StringBuilder();
bool hasDot = false;
int digits = 0;

foreach(char ch in inputString)
{
  if (char.IsDigit(ch) && hasDot)
  {
    digits++;
  }
  else
  {
    digits = 0;
    hasDot = (ch == '.');
  }

  if (digits <= 2)
  {
    result.Append(ch);
  }
}

Console.WriteLine(result.ToString());
Если хорошо подумать и если это допустимо, то задачу можно решить с одним только StringBuilder (одним экземпляром), в котором изначально будет строка для обработки, используя метод Remove для удаления ненужных данных. При такой реализации, будет использоваться цикл for.
Вопрос: Зачем {} в выводе массива echo "{$arr[$i][$j]}?

Лучший ответ:
читать документацию? не, не слышал!
php.net/manual/ru/language.types.string.php#langua...

Худший ответ:
Что бы вместо$arr . '[' . $i . '][' . $j . '] <br>'
получить$arr[$i][$j] . ' <br>'
то есть в двойных кавычках будет обрабатываться $arr[$i][$j] как одно целое, а не как три разные переменные разделенные символами [].
Вопрос: Как лучше упаковать комплектующие?

Лучший ответ:
Вы-же вкурсе что к примеру SATA кабель тоже комплектующая и их можно вообще тупо скидать в пакеты и везти? :)
Что за комплектующие, размер, способ монтажа деталей, наличие габаритных деталей, каким транспортом будет везтись (влажность и т.п.).
Если у вас нет картонных коробок - купите картонные коробки, запаяйте в целлофан свою "комплектующую" и положите в коробочку.

Худший ответ:
подложка+стрейч лента
leroymerlin.ru/catalogue/search/?token=06b20fe81a4...
Вопрос: Имеет ли смысл изучение новой технологии по статьям на хабре?

Лучший ответ:
Боюсь, что вы не сможете изучить технологию по одной статье на три странички, начиная с нуля. Можете рассматривать такие статьи как вводные, или как один из примеров, более-менее подробно разобранный. С этим все норм. Но для полноценного изучения - маловато будет.
Для более подробного погружения в тему можно найти книги, курсы, официальную документацию, и все такое.
Если стартовать не с нуля, то подобной статьи + документация может быть вполне достаточно, но тогда вы бы вряд-ли стали задавать этот вопрос.

Худший ответ:
Я бы не стал называть это "статьей". По факту это целый курс изучения love2d с самостоятельными упражнениями. Выглядит многообещающе и перспективно.
Вопрос: Mixin vs. Include в Pug?

Лучший ответ:
В миксин явно передаются параметры, и это великое счастье. Если вы попытаетесь эмулировать миксины инклюдами, то вы быстро столкнетесь с таким кодом:- var buttonTitle = "кнопка";
- var buttonSmall = "small";
- var buttonType = "danger";
- var icon = "trash";
include 'includes/button'
Представьте две или три такие кнопки рядом. Вы все еще хотите делать это инклюдами? А если надо в кнопку передать кастомную верстку? С инклюдами это вообще невозможно.
Инклюдами можно только подключать эти самые миксины, имхо.

Худший ответ:
Кнопки конечно не стоит выносить куда-то, более сложные конструкции лучше делать миксинами.
Вопрос: Как оживить такой селектор?

Лучший ответ:
Пропустил, это синтаксис предпроцесора  для CSS, он SASS называется, посмотри на их официальном сайте. Есть еще аналоги LESS и Stylus, но SASS самый популярный, это используется для ускорения процесса верстки.

Худший ответ:
в данном случае, это LESS
Вопрос: Не могу продвинуть сайт. В чем проблема?

Лучший ответ:
как клиент я бы ваш сайт не нашел.
Пример . у меня конкретная машинка BOSH 
отказал клапан залива.
я уже раскрутил машину и знаю как он выглядит.
или там помпа гавкнулась.
Что я делаю ищу сколько будет стоить запчасть . наличие. цена работы.
Это я тому, что на сайте всего 5 страниц из них в индексе 2. Нарастите кол-во страниц под более узкие запросы

Худший ответ:
Ну как минимум - убрать 2 дубля главной страницы.