Born in Schoonhoven, Netherlands, Karsdorp started at VV Schoonhoven [nl], as his father, Fred, worked there as a trainer.[3][4] Karsdorp was then scouted by Feyenoord and as a result of joining the club and his parents’ divorce, he and his father moved to Bergambacht.[4] However, Karsdorp revealed that: "When things did not go so well for me at school in my youth, my father coordinated with Feyenoord that I was not allowed to play football anymore. Only when things got better at school. I was allowed to come back to the training. That has been a good lesson in my development."[3][4][5] Following his improved behaviour at school, he re–joined VV Schoonhoven and stayed there for six months before re-joining Feyenoord.[4] Karsdorp became a youth exponent from the Feyenoord Academy.[4] He started out, playing in the midfield position before playing in the right–back position.[6] In December 2013, Karsdorp signed his first professional contract with the club, keeping him until 2015.[7]
2014–15
Ahead of the 2014–15 season, Karsdorp was given a number twenty–six shirt for Feyenoord.[8] His first team debut was on 6 August 2014 against Beşiktaş in a UEFA Champions League third round qualifier replacing Jordy Clasie after 69 minutes in a 3–1 away defeat.[9] Two weeks later on 24 August 2014, he made his league debut for the club, coming on as an 80th-minute substitute, in a 2–1 loss against FC Utrecht.[10] In the UEFA Europa League match against HNK Rijeka on 23 October 2014, Karsdorp was at fault when he and Matthew Steenvoorden were completely misjudged, leading Andrej Kramarić to score, as the club lost 3–1.[11] Shortly after, Karsdorp signed a contract extension with Feyenoord, keeping him until 2018.[12] Since the start of the season, Karsdorp found himself placed on the substitute bench, due to a competition from fellow right–backs, Khalid Boulahrouz and Luke Wilkshire.[13]
By February, he became a first team regular in the right–back position following the absence of Boulahrouz and Wilkshire.[14] In a match against PSV Eindhoven on 22 March 2015, Karsdorp set up the club's first goal of the game for Anass Achahbar, who scored twice, in a 2–1.[15] He then set up Feyenoord's first goal of the game, in a 4–1 loss against Vitesse on 11 May 2015.[16] In a follow–up match against PEC Zwolle, Karsdorp received a straight red card in the 71st minute, as the club lost 3–0.[17] After serving a one match suspension, he returned to the starting line–up against Heerenveen in the second leg of the league's play–off spot semi–final, as Feyenoord lost 3–2 on aggregate.[18] At the end of the 2014–15 season, Karsdorp went on to make 21 appearances in all competitions.
2015–16
Ahead of the 2015–16 season, Karsdorp switched number shirt to two.[19] In the opening game of the season against Utrecht, however, he was sent–off in the 50th minute for a professional foul, in a 3–2 win.[20] But his red card was rescinded by the KNVB disciplinary committee and was allowed to return to the pitch.[21] This was followed up by helping the club keep two clean sheets against SC Cambuur and Vitesse.[22] Karsdorp set up three goals in three matches between 13 September 2015 and 27 September 2015 against Willem II, Roda JC and PEC Zwolle.[23] However, he suffered a groin injury while training that saw him sidelined for a month.[24] While on the sidelines, Karsdorp signed a contract extension with Feyenoord, keeping him until 2020 on 23 October 2015.[25] He didn't make his return to the first team until on 1 November 2015 against ADO Den Haag, starting a match and played 74 minutes before being substituted, in a 1–0 loss.[26] His assist form continued when Karsdorp set up the club's fourth goal of the game, in a 5–0 win against FC Twente on 22 November 2015 and this was followed up by setting up two goals, in a 4–2 win against SBV Excelsior.[27]
Following his return from injury, he continued to regain his first team place, playing in the right–back position.[28] However in mid–February, Karsdorp suffered a groin injury that kept him out for two matches.[29] It wasn't until on 28 February 2016 when he returned to the starting line–up, in a 2–1 win against Utrecht.[30] Karsdorp then set up two goals, in a 2–0 win against Vitesse on 13 March 2016.[31] Since returning from injury, he continued to regain his first team place, playing in the right–back position and helped Feyenoord not only win the KNVB Cup following a 2–1 win against FC Utrecht in the final, but also helped Feyenoord finish third place in the league after beating Willem II 1–0 on 1 May 2016.[32] At the end of the 2015–16 season, Karsdorp went on make thirty–five appearances in all competitions.
2016–17
At the start of the 2016–17 season, Karsdorp started the whole game in the right–back position, as Feyenoord lost 1–0 against PSV Eindhoven in the Johan Cruyff Shield.[33] He helped the club keep three consecutive clean sheets in the first three league matches against Groningen, Twente and Heracles.[34] Since the start of the 2016–17 season, Karsdorp continued to regain his first team place, playing in the right–back position.[35] It wasn't until on 30 October 2016 when he scored his first goal for the club, in a 2–2 draw against Heerenveen.[36]
Karsdorp started in every match since the start of the 2016–17 season until he suffered a meniscal injury while playing against rival, Ajax on 2 April 2017 and was substituted as a result.[37] While on the sidelines, Karsdorp signed a contract extension with Feyenoord, keeping him until 2021.[38] It wasn't until on 7 May 2017 when he returned to the starting line–up and played 82 minutes before being substituted, in a 3–0 loss against Excelsior.[39] In the last game of the season against Heracles Almelo, Karsdorp came on as an 81st-minute substitute and played the rest of the match, winning 3–1 to help the club win the league for the first time since 1999.[40] At the end of the 2016–17 season, he went on to make forty–one appearances and scoring once in all competitions.
Roma
On 28 June 2017, Karsdorp signed with Roma on a five-year deal for a fee of €14 million with various performance-related clauses worth up to €5 million in additional payments. With the transfer, he became Feyenoord's most expensive outgoing player in history.[41]
However, Karsdorp suffered a knee injury that saw him sidelined at the start of the 2017–18 season.[42] After returning to the substitute bench in October, he made his Roma debut, starting a match and played 82 minutes before being substituted, in a 1–0 win against Crotone on 25 October 2017.[43] But his return was short–lived when Karsdorp suffered a knee injury during the match against Crotone and was sidelined for the 2017–18 season.[44] This turns out to be his only appearance for the club.
Ahead of the 2018–19 season, Karsdorp switched number shirt from twenty–six to two.[45] He then returned to the first team and didn't make his first appearance of the season until on 31 August 2018, starting a match and played 77 minutes before being substituted, in a 2–1 loss against A.C. Milan.[46] But Karsdorp found himself behind the pecking order in the first team, resulting in him being placed on the substitute bench, as well as, his own injury concern.[47] He then started in the next five matches, playing in the right–back position between 14 January 2019 and 8 February 2019.[48] Following another injury sustained, Karsdorp found his playing time, mostly from the substitute bench, as he continued to fight for his first team place, as well as, his own injury concern for the rest of the 2018–19 season.[49] At the end of the 2018–19 season, he went on to make fourteen appearances in all competitions.
On 29 August 2024, Karsdorp and Roma agreed to mutually terminate his contract at the club, allowing him to leave as a free agent.[50]
Return to Feyenoord (loan)
On 7 August 2019, Karsdorp returned to Feyenoord on a loan for the remainder of the season.[51] Upon joining the club, he said: "I didn't play much football for two years, everyone knows that. It was often said that I was injured, sometimes that was not the case, but I feel fit now."[52]
Karsdorp's first game after signing for Feyenoord on loan came in the opening game of the season, in a 1–1 draw against Heerenveen.[53] Karsdorp then played in both legs against Hapoel Be'er Sheva and set up two goals in the second leg, as he helped the club win 6–0 on aggregate to reach UEFA Europa League Group Stage.[54] It wasn't until on 15 September 2019 when Karsdorp scored his first goal for the club, in a 3–2 win against ADO Den Haag.[55] After missing one match, he returned to the starting line–up against FC Twente on 29 September 2019 and set up Feyenoord's first goal of the game, in a 5–1 win.[56] This was followed up by scoring his second goal of the season, in a 2–0 win against Porto in the UEFA Europa League match.[57] However, Karsdorp suffered a groin injury that kept him out for two months.[58] It wasn't until on 25 January 2020 when he made his return to the first team, coming on as an 83rd-minute substitute, in a 3–2 win against Heracles.[59] Karsdorp then set up two goals in two matches between 16 February 2020 and 22 February 2020 against PEC Zwolle and Fortuna Sittard.[60] He continued as a first-team regular, making twenty–two appearances and scoring two times in all competitions before the 2019–20 Eredivisie and the KNVB Cup, which the club reached the KNVB Cup Final, were halted in the Netherlands on 12 March due to the pandemic, which the season was eventually cancelled.[61] Following this, Karsdorp returned to his parent club despite transfer speculation of him rejoining.[62]
PSV Eindhoven
On 31 August 2024, Karsdorp returned to the Netherlands and signed for PSV Eindhoven on an initial one-year deal with an option of an extension.[63]
International career
Youth career
In August 2011, Karsdorp was called up to the Netherlands U17 squad for the first time.[64] He made his Netherlands U17 debut, starting the match, in a 1–0 win against Italy U17 on 16 September 2011.[65] Three days later on 19 September 2011, Karsdorp made his second (and last) appearances for the U17 side, coming on as a 41st-minute substitute, in a 3–1 win against Israel U17.[66]
In August 2012, Karsdorp was called up to the Netherlands U18 for the first time in his career.[67] He made his Netherlands U18 debut against USA U18 on 11 September 2012, starting the match and scoring the U18’s first goal of the game, in a 4–2 loss.[68] Karsdorp went on to make two appearances for Netherlands U18 side.[69]
In August 2013, Karsdorp was called up to the Netherlands U19 for the first time in his career.[70] He made his Netherlands U19 debut against Germany U19 on 6 September 2013, starting the match in the central midfield position, in a 6–1 loss.[71] Karsdorp then scored his first Netherlands U19 goal, in a 3–1 win against Turkey U19 on 13 October 2013.[72] He went on to make seven appearances and scoring once for the U19 side.[73]
In October 2014, Karsdorp was called up to the Netherlands U20 squad for the first time.[74] He made his Netherlands U20 debut, starting the whole game, in a 2–2 draw against Turkey U20 on 9 October 2014.[75] Karsdorp went on to make three appearances for the U20 side.[76]
A month later in November, Karsdorp was called up to the Netherlands U21 squad for the first time.[77] He made his Netherlands U21 debut, starting the whole game, in a 3–1 loss against Germany U21 on 13 November 2014.[78] Karsdorp went on to make two appearances for the U21 side.[79]
It wasn't until on 7 October 2016 when Karsdorp made his Netherlands debut, starting in the right–back position, in a 4–1 win against Belarus.[82] In a follow–up match against France, he, once again, started in the right–back position, as the national side lost 1–0.[83] His next appearance for Netherlands came on 25 March 2017 against Bulgaria in a 2018 World Cup qualifier, as they lost 2–0.[84] Having not been called up for the senior team in over two years, Karsdorp said in September 2019: "Of course I was part of the Dutch national team and I also watched the Orange squad in the past week. I am happy with the two victories and I don't want to be involved with the Orange at all. I only played four games here, before that. Fifteen matches in 100 weeks. Look, if I have played twenty games, delivered ten assists and scored five goals, you can ask me whether the Orange will come back into the picture. I have consciously returned to Feyenoord. You just know that if you play here every week and you are doing well that opportunities arise".[85]
In June 2018, Karsdorp married his long term–girlfriend, the South American model Astrid Lentini.[87][88] In addition to Dutch, he speaks English and is learning Italian. His wife, Astrid, who is of Italian origin, helps interpret the language for him.[89] The couple has two sons.[88]