Up to a point. It's an analogue process so each copy degrades the signal. At some point games started having custom file loaders which made them load faster but also served as a kind of copy protection as copies were more likely to fail. Of course it also meant the original was more likely to fail.
The trick was to add a little circuit to the player which would keep the signal as clean as possible while reinforcing it. I did a similar thing many moons ago by putting an old TTL chip into the C64 Datassette then wire its gates as buffers. The input was connected to a point where I identified the played cassette signal was present and the output after some light filtering went to a RCA plug to which I would connect my Aiwa deck in record mode. Any copy made that way would work much better than the originals: no more failed loads after 25 minutes waits and no more azimuth twiddling to find the sweet spot.
We also used something we called turbotape to load our games. We would first load turbotape, forward to where the game was on the tape and then either type <leftarrow>L or SYS<someNumberIcantRemember> to load the game.
Sometimes it did, sometimes it didn't. It depended on the quality of the cassette deck and also how crappy the tape was you were recording to. Me and my friend often used to try high speed dubbing but that rarely yielded good results.
I did the same. It wasn't ZX Spectrum though, it was an MSX. Same deal. This was actually before I even knew you could copy files using the computer itself.
Analog copies are lossy, so you can only copy so many times before it becomes unreadable. Higher quality tapes (even better, chrome based) would allow for more copies.