Why this does not work: you should use =!=( UnsameQ) and not !=( Unequal) for structural comparisons:
In[18]:= MatchQ[t[3],x_/;Head[x]=!=f]
Out[18]= True
For this reason, you can evaluate the reason:
In[22]:= Head[t[3]]!=f
Out[22]= t!=f
== (Equal) != (Unequal) , ( ) . . , SameQ UnsameQ.
, , :
MatchQ[t[3],Except[_f]]