I'm planning to use OpenCart to build a web site. According to the licence (GPLv3) it's necessary to provide the source code of any modifications made. Is it acceptable to provide this on request or should it be linked to from every page on the shop?
You only need to provide source if you distribute the software, not when you use it.
2 Basic Permissions.
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
I don't think there is anythin legally wrong with providing the source on a per-request basis, but this is generally frowned upon for two reasons. 1) it requires action on your part to respond to each and every request, and 2) a simple download link is scalable and instant.
Note that you are only required to provide the modifications if you are redistributing the program, as explained in the other answer.