Адмиралтейская верфь Петербурга приступила к строительству морских кораблей. Карл XII, получив известие о строительстве города, нагло заявил: «Пусть царь трудится над закладкой новых городов. Мы хотим лишь оставить за собой честь впоследствии забрать их». Через шесть лет шведский король попытался забрать построенную задолго до Петербурга Полтаву. Под этим украинским городом король потерял и европейскую славу, и лучшую в Европе армию. Карл XII, как и Наполеон I не интересовались историей России, государи которой за три столетия до Петра I говорили татаро-монгольским ханам: «Не ходите на Русь — здесь живет ордынская смерть».
Весной 1705 года войска Петра I вступили на землю Речи Посполитой. В начале сентября 1706 года Карл XII разбил Августа II под Лейпцигом. По Альштадскому мирному договору со шведами саксонский курфюрст отказался от польского трона и от союза с Россией. В начале января 1708 года Карл XII во главе армии начал поход на Москву.
Шведский король громогласно заявлял, что примет капитуляцию Петра только в Москве. В июле 1708 года шведская армия отбросила у Головчина корпус Шереметева и подошла к Могилеву. Карл XII ждал из Риги пополнение и громадный обоз с оружием и продовольствием. На пути шведской армии русские войска уничтожали фураж, портили дороги, яростно защищали переправы. Населению было предписано прятать продовольствие. Военный совет русской армии постановил генерального сражения не давать.
Шведы не стали ждать Левенгаупта и в начале августа 1708 года двинулись на Смоленск. У Мстиславля их ждала полностью укомплектованная и реорганизованная русская армия. 30 августа у местечка Доброе произошел жестокий бой, длившийся около трех часов. Русские войска во главе с А. Меншиковым и М. Голицыным первый раз в Северной войне отбросили шведов.
7 сентября 1708 года русская и шведская армия встали друг против друга на границе России и Речи Посполитой. Левенгаута с обозом до сих пор не было, а также проводимая русскими тактика выжженной земли ставила шведские войска в очень сложное положение. Карл понял, что по смоленской дороге ввиду неизбежных продовольственных затруднений, идти невозможно. Отступить за Днепр и там дожидаться Левенгаута он считал для себя позором. В середине октября Карл XII остановил армию недалеко от Стародуба, у переправ через Десну. Король так и не дождался Левенгаута. Вместо патронов, пороха и окороков Карл XII получил сообщение о разгроме пополнения и обоза, узнав о существовании белорусской деревни Лесная.
Не дожидаться медленно ползущего обоза из восьми тысяч телег, даже в сопровождении пятнадцати тысяч шведов, было стратегической ошибкой Карла, и Петр наказал зарвавшегося шведского короля. Он не мог допустить соединения сорокатысячной армии Карла и огромного обоза с пятнадцатитысячным пополнением. Левенгаута было необходимо остановить до соединения с королем.
Вышедший в начале июня из Риги обоз за месяц прошел двести тридцать километров. Петр сам возглавил особый конный отряд — «корволант», в который вошли десять драгунских полков, десять батальонов посаженной на коней пехоты, полковая артиллерия и казачья разведка. Петр настиг Левенгаупта недалеко от Шклова и Кричева, у деревни Лесной. Против 16 000 шведских солдат Петр вел 12 000 русских воинов.
Отчаянный бой продолжался весь световой день 28 сентября. Левенгаупт потерял 9000 солдат, 17 пушек, 45 знамен и 8000 груженых телег, которые он не успел уничтожить. В середине октября 1708 года генерал привел к Карлу 6000 голодных и измученных солдат. Корволант потерял 1000 воинов убитыми и 3000 ранеными. Бывший шведский обоз русский конвой благополучно доставил в Смоленск.
Победа при Лесной сильно подняла дух русской армии. Петр сразу оценил преимущества боя не в чистом поле, как это обычно происходило в Европе, а на пересеченной местности, когда фланги прикрывает лес или овраги, что исключало возможность окружения. До Полтавской битвы оставалось девять месяцев.
21 октября в штаб-квартиру Карла XII в Стародубе прибыл посланец украинского гетмана Ивана Мазепы. Еетман правил Украиной уже двадцать лет и пользовался полным доверием Петра I. Семидесятилетний Мазепа лавировал между Швецией и Россией, пытаясь выйти из подчинения Москве. Его хитроумные планы нарушил Карл, вынужденно повернув армию на
Украину. «Черт его сюда несет» — в отчаянии говорил Мазепа. Война из белорусских земель неожиданно переместилась на земли украинские. Петр послал гетману уже несколько приказов выступить против шведов. Колебавшийся Мазепа не верил, что Россия устоит перед Швецией. В конце октября 1708 года Мазепа и всего несколько тысяч казаков прибыли в шведский лагерь. Это было все, украинский народ не поддержал своего гетмана.
27 октября Петр в штаб-квартире русской армии получил неожиданное известие «о никогда не чаянном случае измены гетманской. Положение русской и шведской армий резко изменилось. Теперь Карл мог спокойно переправляться через Десну и получить все, что необходимо армии в огромных складах гетманской столицы Батурине, перезимовать в украинских городах, где дождаться подкреплений из Швеции и Польши, а возможно даже союзников из Турции и Крыма. В союзе с украинцами, поляками и турками отмобилизованная и отдохнувшая шведская армия через Белгород, Курск и Тулу могла идти на Москву. Карл XII во всеуслышание объявил, что вскоре разделит Россию на десяток княжеств и назначил коменданта Москвы.
Шведы двинулись в Батурин. На несколько часов раньше Карла у Батурина оказался русский десант А. Меншикова. Гетманская столица была сильно укреплена, а ее гарнизон состоял из десяти тысяч казаков — столько же драгун было у Меншикова. Один из осажденных указал русским тайную калитку в город. Отборные бойцы вошли в город и сумели прорубиться навстречу осаждавшим. 2 ноября Батурин был взят. А. Меншиков вырезал почти все население, уничтожил все собранные запасы и превратил гетманскую столицу в груду развалин. Это произвело ужасное впечатление на вскоре подошедших к городу шведов, а с Мазепой случилась истерика.
5 ноября 1708 года в присутствии Петра в Глухове верные союзу с Россией украинские казаки избрали нового гетмана И. Скоропадского. Петр обнародовал планы Мазепы о подчинении Украины Польше и Швеции — на рыночных площадях читали перехваченные письма бывшего гетмана. Гордый украинский народ, конечно, не пошел под новое польско-шведское ярмо. По всей Украине началась партизанская война против мародерствующих шведов. Духовенство предало Мазепу анафеме и он в течение месяца превратился в ничто.
За очень холодную зиму 1708 — 1709 годов украинские партизаны и русские летучие отряды сократили шведскую армию на четверть. Петр из Воронежа и Азова в Азовское море сам привел построенные им корабли. Из Стамбула тихо побежали придворные, а султан и крымский хан молча согласились, что поддержка заносчивого Карла XII обойдется себе дороже. Шведам не удалось привлечь в союзники Турцию.
В начале лета 1709 года Петр прибыл в ставку русской армии в Лебедине и Сумах. К тому времени Карл решил захватить Полтаву. Украинский город стоял на перекрестке важных дорог и имел стратегическое значение. На Дону с трудом было подавлено восстание Кондратия Булавина. Царю Петру приходилось успевать везде самому. «Нужных людей мало» — писал он будущей императрице Екатерине.
Полтавский гарнизон под командой полковника Келина составляли четыре тысячи солдат и три тысячи вооруженных жителей. Город не имел каменных стен. Укрепления Полтавы, расположенной на высоком и крутом берегу реки Ворсклы, состояли из земляного вала, усиленного палисадом. Крепостной многоугольник окружал ров с водой. К 1 мая 1709 года у Полтавы сосредоточилась вся шведская армия. Руководить штурмом король назначил генерал-квартирмейстераГилленкрока, которого сами шведы называли «маленьким Вобаном».
Штурм окончился неудачно и началась осада Полтавы. 27 мая у деревни Крутой Берег недалеко от Полтавы сосредоточилась русская армия. Шведы штурмовали Полтаву 15, 24 и 29 мая и в крепостных рвах легли три тысячи шведских солдат. Восемь раз Карл XII предлагал полковнику Келину сдать город. Ко дню Полтавской битвы в крепости оставалась одна бочка пороха, а пушки давно стреляли камнями и гвоздями.
В начале июня под Полтаву прибыл Петр I. На военном совете было решено дать шведам «генеральную баталию». Полтавский гарнизон был извещен об этом запиской в посланном в город ядре.
25 июня русская армия укрепилась у деревни Яковцы, в пяти километрах от Полтавы. Битву было решено начать 29 июня, в день рождения Петра. 21 и 22 июня шведы отчаянно штурмовали Полтаву, потеряв за два дня более двух тысяч солдат. Не имевший каменной крепости город выстоял перед всей шведской армией.
В XVIII веке выбор позиции для генерального сражения имел очень важное значение. Обычно именно генеральное сражение решало судьбу всей войны. Позицию выбирал Петр и вынудил Карла атаковать в направлении, выгодном русской армии. Тыл армии Петра прикрывал обрывистый и практически неприступный берег Ворсклы. Левый фланг защищал Яковецкий лес, доходивший почти до самой Полтавы. Правый фланг был открыт, а перед фронтом армии располагалось ровное поле около двух километров в глубину. За ним стоял Будищенский лес. Яковецкий и Будищенский леса разделяло открытое пространство шириной чуть более километра. Только здесь шведские войска могли пройти для атаки русской армии.