we still have one issue here: the content document could be any class or interface - its the seo extractors that decide if they can handle it. i think you need to get rid of the if. and make sure that seo also works on incomplete data.

for the two calls above, why not $this->seoPage->readMetadataFrom($contentDocument)? the current methods are strange and first setting and then calling the method feels weird.