Haha, well in a perfect world maybe. =P
I think the way it behaves like it does, however, is because, as I had mentioned earlier, everything associated with the if statement is ignored/never processed if the condition is false... An easy way to imagine this might be to pretend that that entire block of code is erased from the script if the else is reached. (Obviously this probably isn't happening, but I think it's a simple way to understand the idea)
(Try, also, to think of this from the script processor's point of view rather than your own. Yes, in text, the goto label inside the if is clearly present to us, but to the script, once it evaluates that condtion to false, nothing associated with it exists.)
As for placing the goto label before the if statement... If you think about it, this serves two functions: First - the label is never ignored, (since it's not associated with any false conditions), and second - the if statement is given another chance to evaluate to true. (Which of course is why I suggested an or condition that depends on the else having been reached first)