За несколько месяцев действия Транссибирской магистрали положение с поставками значительно улучшилось, и поток войск и снабжения, бывший таким вялым в начале войны, стал вполне удовлетворительным. К концу сентября русские сухопутные силы в Маньчжурии увеличились до 245 000 человек, тогда как японские армии под командованием маршала Оямы составляли только 150 000 человек. Русские не имели точного представления о численности японцев и сильно завышали ее, в то время как японцы знали все о численном росте русских сил.
Общая численность японских войск была больше, если учитывать инженерные и технические войска и тыловые части. Всего она доходила до 300 000 человек, но половина этих сил была необходима, чтобы поддерживать линии снабжения. Россия сейчас имела преимущество, поскольку ей нужно было только поддерживать военные силы на уровне около 330 000 человек для достижения превосходства в боеспособном составе, что у нее в этот момент было.
Генерал Куропаткин решил предпринять наступление. Он выбрал район, ограниченный на западе и севере рекой Хуньхэ, на юге рекой Тайцзыхэ, а на востоке верховьями Хуньхэ; это восточнее Фушуня к северу от Ляоляна. Русские перешли Шахэ, уходя на север в начале сентября. Теперь при наступлении им надо было опять переходить ее. В середине поля боя проходила железная дорога, вытянувшаяся на гладкой равнине, как ленивая змея.
Погода изменилась, наступившая осень затрудняла ведение военных действий. Если прежде гаолян был выше человеческого роста, представляя собой укрытие для солдат, в котором можно было в разных направлениях прокладывать лабиринты, то теперь он был частично убран, а оставшаяся короткая, как щетка, острая стерня мешала лошадям кавалерии и затрудняла продвижение пехоты обеих сторон.
Местность, где проходило сражение при Шахэ (см. карту на стр. 141)
Другой вид поля битвы с озера
Генерал Куропаткин назначил наступление на 5 октября, среду. Японский фронт растянулся подковой: войска генерала Оку были на левом фланге, генерала Нодзу — в центре и генерала Куроки — на правом фланге, так же как в сражении под Ляояном. План генерала Куропаткина состоял в том, чтобы атаковать основными силами 1-ю армию генерала Куроки, отбросить ее назад к Ляояну, а потом пройти маршем до Порт-Артура и снять осаду 3-й японской армии.
Русское наступление 5 октября началось на рассвете. Части наступали с обеих сторон железнодорожной линии, идущей от Мукдена. Генералу Штакельбергу было поручено атаковать с севера, а генералу Ренненкампфу, командующему казаками, нужно было зайти с северо-востока и отбросить назад 1-ю японскую армию.
В первые четыре дня наступления японцы почти не оказывали сопротивления, потому что их основные армейские формирования находились далеко сзади, и к субботе 9 октября Штакельберг занял Бяньяпуцзы, точку на севере Яньтайских угольных копей, которые являлись командными высотами над сетью дорог между Фушунем, Мукденом и Ляояном. 1-я армия генерала Куроки оказалась в сильном затруднении, потому что казаки перешли Тайцзыхэ и перерезали его коммуникации с тылом. На следующий день маршал Ояма усилил 1-ю армию, японская кавалерия отбросила казаков назад и восстановила сообщение с тылом. Куроки удержался, хотя русские войска волнами накатывали на его позиции. Русские потери в этом секторе фронта оценивались в 20 000 человек. На двух других участках фронта японцы контратаковали, и русское наступление перешло в оборонительные бои. Тут же 2-я и 4-я японские армии двинулись вперед, чтобы отрезать русских от железной дороги. Это могло стать для русских катастрофой. В течение недели исход боев был под вопросом. Все решилось, когда обе армии, сражаясь до изнеможения, закончили бой на десять миль южнее Мукдена.
Между 9 и 17 октября фронт растянулся на двадцать миль. Около двух тысяч полевых орудий было задействовано с обеих сторон. 13 октября русское отступление стало очевидным, включая силы Штакельберга. На участке 2-й армии генерала Оку солдаты захватили двадцать пять полевых орудий. Русским было важно суметь задержаться здесь, чтобы отход не стал разгромом, потому что войска Штакельберга, наступавшие в южном направлении против 1-й армии генерала Куроки, были оставлены незащищенными с обеих сторон. Если японцы смогут прорваться сквозь линию русских справа, они сумеют окружить Штакельберга, уничтожить его армию, и тогда Маньчжурская армия генерала Куропаткина будет разбита. В этот критический момент генералу Бильдерлингу было поручено изменить ход сражения, ему было дано тридцать шесть часов. Русские стояли твердо, центр и левый фланг русских сил были спасены. 14 октября дождь замедлил действия, хотя они продолжались даже под дождем. 16 октября на одной позиции, называемой сопка Одинокого Дерева (Путиловская сопка), русские атаковали семь раз и каждый раз были отбиты.
С русской стороны в сражении участвовали силы 5-го, 19-го и 20-го Западносибирских стрелковых полков. С японской стороны участвовали части 41-го, 40-го, 20-го и 39-го полков.