Milan Badelj a semnat cu Dinamo Zagreb un contract la vârsta de 17 ani, în 2007, imediat după ce acesta a plecat de la academia de tineret a rivalei lui Dinamo Zagreb din același oraș, NK Zagreb. Pentru sezonul 2007-2008, el a fost trimis împrumutului la echipa afiliată a lui Duinamo, Lokomotiva pentru a căpăta experiență la prima echipă. A jucat în 28 de meciuri și a marcat șapte goluri pentru Lokomotiva în al treilea eșalon croat.
Dinamo Zagreb
Badelj jucând pentru Dinamo Zagreb în aprilie 2009.
La o vârstă fragedă, Badelj a fost deja văzut ca posibil înlocuitor pentru Luka Modrić, un jucător cheie din echipa lui Dinamo Zagreb care a plecat la Tottenham Hotspur în 2008.[4]
În 2008, Badelj a intrat în prima echipă și a devenit un jucător important. El și-a făcut debutul pentru Dinamo în calificările Ligii Campionilor împotriva clubului nord-irlandez Linfield. Apoi a debutat în campionat în prima etapă a sezonului 2008-2009 împotriva lui Rijeka, marcând primul gol în victoria cu 2-0.[5] A terminat primul sezon cu Dinamo cu 31 de meciuri în campionat și 12 meciuri în Cupa UEFA.
Badelj a continuat să impresioneze încă de tânăr, devenind titular în sezonul 2009-2010. În martie 2011 a marcat un gol într-o victorie scor 2-0 în derby-ul împotriva marei rivale Hajduk Split.[6] Badelj a continuat să facă meciuri impresionante și în sezonul 2010-2011, purtând chiar banderola căpitanului în câteva meciuri.[7][8]
În sezonul 2011-2012, Badelj a fost unul dintre jucătorii-cheie din echipa lui Dinamo care a ajuns pentru prima dată în Grupele Ligii Campionilor după 12 ani. A jucat în toate cele șase meciuri din cadrul grupelor împotriva lui Real Madrid, Lyon și Ajax.[9]
În ceea ce avea să fie ultima sa partidă de pe Stadionul Maksimir pentru Dinamo, într-un meci de playoff al Ligii Campionilor împotriva Mariborului din Slovenia, Badelj a marcat un autogol prin care echipa adversă a reușit să smulgă egalul în tur. În retur, Badelj s-a revanșat și a marcat golul victoriei.[10]
Hamburger SV
Badelj la HSV.
Badelj s-a transferat la Hamburger SV din Bundesliga în august 2012, plătindu-se în schimbul său o sumă de aproximativ 4,5 milioane de euro, potrivit presei croate.[11] El și-a făcut debutul în campionat la scurt timp după semnarea contractului după ce a intrat într-un meci împotriva lui Werder Bremen. A devenit rapid titular, de regulă jucând ca playmaker în spatele liniei de trei.[12] Badelj a marcat primul său gol în Bundesliga pe 27 noiembrie 2012, împotriva lui Schalke 04, într-o victorie cu 3-1.[13]
Fiorentina
Pe 31 august 2014, Badelj a fost transferat de echipa de Serie A, Fiorentina, pentru aproximativ 5 milioane de euro.[14] După moartea lui Davide Astori, a fost numit căpitanul echipei.
Lazio
Badelj a semnat cu Lazio pe 1 august 2018 din postura de jucător liber de contract.[15] La 17 februarie 2019 a înscris primul gol pentru club într-o înfrângere 2-1 cu Genoa.
Cariera la națională
În timpul carierei sale a jucat 63 de meciuri pentru naționalele de tineret, trecând pe la toate categoriile de vârstă de la U16 la U21.
În 2010, Badelj a fost selecționat pentru prima dată la echipa națională a Croației, fiind doar rezervă. Debutul său competitiv a venit în timpul unui meci de calificare la UEFA Euro 2012 împotriva Maltei; un meci pe care Croația l-a câștigat cu 3-1 pe 2 septembrie 2011, în care Badelj a marcat al doilea gol.[16] A fost ales în lotul pentru UEFA Euro 2012;[17] iar în mai 2014, a fost selecționat în lotul definitv care a făcut deplasarea la Campionatul Mondial FIFA 2014 din Brazilia, fiind convocat în urma unei accidentări a lui Ivan Močinić.[18] Cu toate acestea, el a fost rezervă neutilizată și nu a mai apucat să joace deoarece Croația a fost eliminată în grupe. A fost chemat la lot pentru Campionatul European din 2016.[19]
În mai 2018, Badelj a fost selecționat în lotul de 23 de jucători care au făcut deplasarea la Campionatul Mondial al FIFA din 2018 din Rusia.[20] A înscris primul gol al turneului într-o victorie scor 2-1 asupra Islandei; ajutând Croația să obțină punctaj maxim.[21][22] La 1 iulie, în rmeciul din șaisprezecimi cu Danemarca, meciul era egal, 1-1, și a fost decis la penaltiuri, cu Badelj ratând prima lovitură de pedeapsă a Croației, dar echipa sa s-a calificat, marcând trei goluri, cu unul mai mult față de Danemarca.[23]