Шанхай размешчаны ў дэльце ракі Янцзы на ўсходнім узбярэжжы Кітая на прыкладна роўнай адлегласці ад Пекіну і Ганконгу. Муніцыпалітэт у цэлым складаецца з паўвострава паміж Янцзы і Ханчжоў, а таксама шэрагу дробных астравоў. Гарадскі муніцыпалітэт мяжуе на поўначы і захадзе з правінцыямі Цзянсу, на поўдні з правінцыяй Чжэцзян, а на ўсходзе з Усходне-Кітайскім морам. Уласна горад дзеліцца напалову ракой Хуанпу, якая зяўляецца адным з прытокаў Янцзы. Гістарычны цэнтр горада, раён Пусі, размешчаны на заходнім беразе Хуанпу, у той час як нядаўна пабудаваны раён Пудун, які змяшчае цэнтральны фінансавы рэгіён, быў пабудаваны на ўсходнім беразе.