Fitzgerald, 36, had 75 catches for 804 yards and four touchdowns in 16 starts last season. He hasn't missed a game since 2014.
The 11-time Pro Bowl selection, 2008 All-Pro and 2016 Walter Payton Man of the Year award winner has played his entire career in Arizona since he was selected No. 3 overall out of Pittsburgh in the 2004 NFL Draft.
He was scheduled to become a free agent in March.
"This season was among the most fun of my career," Fitzgerald wrote on social media. "The future is so bright for this team and I relish the opportunity to build with this talented young nucleus.
"Arizona is where I started and where I will finish. 2020! Let's get to work!"
Fitzgerald has 1,378 catches for 17,083 yards, trailing only Jerry Rice in those categories for the most in NFL history. His 120 receiving scores rank No. 6 in NFL history.
The future Pro Football Hall of Famer is the Cardinals' franchise leader in games played, catches, receiving yards, receiving scores, total scores and 100-yard games.