Since you mention rules, if you do want to introduce rules so that you only trigger goal registration if other conditions are true then you can extend the processItem pipeline defined in Sitecore.Analytics.config to programmatically process a custom rules field on the context item:
// check if there are any rules set, if not proceed as normal, otherwise do the below
var context = new RuleContext
{
Item = args.Item
};
foreach (Rule<RuleContext> rule in RuleFactory.GetRules<RuleContext>(new[] { args.Item }, "RULES FIELD NAME").Rules)
{
if (rule.Condition != null)
{
var stack = new RuleStack();
rule.Condition.Evaluate(context, stack);
if (context.IsAborted)
continue;
if ((stack.Count != 0) && ((bool)stack.Pop()))
// condition met, do something
}
}
And if the conditions on the rules field are satisfied then add the tracking field of the context item to the TrackingParameters property on the ProcessItemArgs:
args.TrackingParameters.Add(new TrackingField(args.Item["__Tracking"]));
Your processor will also have access to the current interaction in the pipeline args so you could for example say register a goal conversion on the current page but only if the user has not already registered the goal... or basically anything you can come up with in the rules engine.