Visible to a human and visible to QTP are two different things. An object can be present (meaning it is visible to QTP) but not displayed (meaning a human can't see it) and I have not found a way to distingish. This gets even more problematic with .NET apps that use "layers" where multiple "layers" of objects are seen by QTP but only one layer is enable for human presentation.
So, perhaps other will be able to offer solutions, where as I am only comiserating about a shared problem...
What usually happens is a small Web table/Frame is made visible / hidden based on the toggle click.
What I can think of now is --
Spy the link, see the parent (or a level above), it would be a WebTable (usually) which is commonly visible in either cases (collapsed/expanded).
The idea is to get one common intermediate level webtable for both the cases and check the child Items to see if the link exists.
Can explain better if you post snapshots of either cases.