Das Stadtgebiet liegt am westlichen Rand des Klagenfurter Beckens am Zusammenfluss der Drau mit der Gail. Das Gemeindegebiet von Villach grenzt an bzw. umschließt mehrere Seen, darunter den Ossiacher See, Faaker See, Silbersee, Vassacher See, Grünsee, Magdalensee und Leonharder See.