What's the best practice using jails with ZFS for a webserver?
I'm in full agreement with SirDice here, with these things there really is no 'best'. Even so, I can understand how that doesn't really help you right now, so let's try to check some possible scenarios.
I understand that the jail should be in a separate dataset.
Should it? I mean; there are definitely advantages if you set it up this way, but when you're going to set up snapshots you'd be effectively making a snapshot of the entire OS. Is that really efficient if you consider that installing the OS itself basically only consists of extracting
base.txz?
And even the use of the jail itself could be discussed. There are many advantages of using a jail, just like there can be quite a few disadvantages.
It's also possible to create a specific ZFS filesystem which contains all (or most) of your data which you then make available within your environment using
nullfs mounts (loopback).
My suggestion would be to start experimenting with this stuff. There is plenty of software which can set all of this up for you out of the box but personally I'd suggest going over the chapter about Jails in the FreeBSD handbook and start setting something up manually. That way you'll get a good understanding of how this stuff works, which should also make it easier to determine what strategy would best suit your needs.
Another reason for doing it this way is that if you eventually do decide to use a pre-made solution and for some reason something doesn't work right with that program you probably wouldn't end up stuck with having it to do 'their' way, because you know how the whole thing works and can therefor also perform certain actions and tweaks manually.