Получив сообщение о капитуляции Порт-Артура 20 декабря 1904 года, Куропаткин принимает решение о переходе в наступление до прибытия в подкрепление японцам освободившейся после победоносного завершения осады крепости 3-й армии генерала Ноги.
Целью наступления поставлена ограниченная – не разгром противника, а оттеснение его за рубеж реки Тайцзыхэ.
Как и ранее в наступлении у реки Шахэ, Куропаткин задумал применение охватывающего бокового удара противника, только на этот раз не на левом – гористом, а на правом – равнинном фланге силами 2-й Маньчжурской армии.
В зависимости от результатов действий 2-й армии и реакции противника наступление на центральном участке фронта должна была начать 3-я Маньчжурская армия, а затем в зоне своей ответственности и 1-я Маньчжурская армия.
Верный себе, Куропаткин запретил командующим армий использовать в наступлении все имеющиеся в распоряжении корпуса и дивизии, оставив большую часть соединений в оперативном резерве.
В ночь с 11 на 12 января 1905 года в лютый мороз ударный отряд в составе 1-го Сибирского стрелкового корпуса 2-й Маньчжурской армии внезапной атакой захватил плацдарм на западном берегу реки Хуаньхэ, к утру 12 января 1905 года овладел всей линией реки и успешно развил наступление, захватив к вечеру того же дня тактически важный опорный пункт японцев Хейгоутай.
13 января 1905 года 4-я пехотная дивизия 2-й Маньчжурской армии предприняла атаку на Сандепу, но по ошибке захватила другой населенный пункт-находившуюся в 400 метрах севернее от цели наступления деревню Баотайц-зы, которую русские войска удерживали под яростным огнем противника в течение двух последующих суток. Дальнейшие попытки захватить Сандепу окончились без результата, и, потеряв убитыми и замерзшими 1122 человека, дивизия была вынуждена отойти на исходные позиции.
Ключевым днем всего сражения стало 15 января 1905 года.
Куропаткин приказал 1-му Сибирскому корпусу остановить наступление, но его командир-генерал-лейтенант Г.К. Штакельберг принял самостоятельное решение продолжить операцию. Силами 1-й Сибирской дивизии занята деревня Сумапу, осуществлен маневр конницей с целью окружения и уничтожения японских войск непосредственно в районе Сандепу. После продолжительной артиллерийской подготовки 31-я пехотная дивизия русской армии стремительной атакой захватила несколько китайских деревень близ Сандепу и, выйдя с боем в тыл обороны неприятеля, поставила его в критическое положение.
Командующий армией Гриппенберг, на свой страх и риск, вводит в бой 10-й армейский корпус генерала К.В. Церпицкого, который проводит успешную атаку с угрозой выхода в тыл Сандепу.