The second-ranked Serb's win ensured that the upset-filled German Open would not become the first WTA Tour event in 28 years in which none of the top six seeds reached the semifinals.
Ivanovic, the defending champion, split sets with the 10th-seeded Szavay on Friday, then rolled to a 3-0 lead when they returned to the court. A backhand netted by the Hungarian ended a two-hour match.
The clay-court event began with six of the world's top seven in the field - and 17 of the top 20 - before a string of upsets.
Russian Dinara Safina did most of the damage, ousting top-ranked Justine Henin and then snapping Serena Williams' 17-match win streak in the quarterfinals.
Safina will face 18-year-old Victoria Azarenka in her Saturday semifinal, while Ivanovic will play ninth-ranked Elena Dementieva.
German teen Lisicki upsets Peer in German Open
Serena’s winning streak ends at 17 matches
Fatigued Henin withdraws from Italian Open
Roddick pulls out of Rome with back injury
Gonzalez beats El Aynaoui at BMW Open