11 czerwca miała miejsce bitwa na rzece Parana pod Riachuelo. Brazylijska flota dowodzona przez Francisco Manuela Barroso da Silva wygrała i poważnie osłabiła flotę paragwajską i zapobiegła stałej okupacji Argentyny przez Paragwaj. Bitwa ta praktycznie przesądziła o dalszych losach wojny, bo umożliwiła sprzymierzonym kontrolowanie ujścia La Platy. We wrześniu Paragwajczycy ponieśli kolejną porażkę pod Uruguaianą. W styczniu następnego roku sprzymierzeni przekroczyli rzekę Parana i 24 maja 1866 roku rozbili armię Lopeza w bitwie pod Paso de Patria. Mimo porażki dyktator zreorganizował swoje siły. W krwawej bitwie pod Curupayty 22 września 1866 Paragwajczycy rozgromili wojska przeciwnika. W walce stracili zaledwie 54 ludzi przy prawie 9 tys. po stronie sprzymierzonych.

Trwające przez cały następny rok walki nie przyniosły powodzenia żadnej ze stron. W tym czasie więcej żołnierzy zmarło w wyniku epidemii cholery aniżeli w walkach. W roku 1867 Lopez opuścił stolicę Asunción, po czym skierował się na północ, pustosząc po drodze liczne ziemie. W lipcu 1868 roku skapitulowała twierdza Humaitá. W tym czasie wojska argentyńskie i brazylijskie mozolnie przedzierały się wzdłuż rzeki Paragwaj w kierunku północno-wschodnim. Lopez z resztką swojej armii w sile 10 tys. ludzi stanął w pobliżu Ypacaraí.