dachcom-digital/pimcore-seo

Content Analysis

ChrisB9 opened this issue · 3 comments

Q A
Bug report? no
Feature request? yes
BC Break report? no
RFC? -

For a website, the client (previous wordpress user) has asked to have a more options similar to those of the likes of yoast.
Now, while i don't think meta-keywords are a thing anymore, the only real difference seems to be a recommendation of how things can be approved.

This is how i could imagine this to look like for this extension too:
image

Additionally, the way you seem to have drafted that in your images with the blue checkmarks does seem like a good too:
image

I would create a PR for this but maybe you already have something similar in the pipeline. If not, then do you have ideas/concepts in this direction that way i can start on a solution and give it to my client.

Hey @ChrisB9 thanks for your input. Great idea! A quality analysis tool is on our roadmap (like you, we also always end up in a "yoast-comparing" discussion 😄).

The idea would be to add a colored (red, orange, green) badge-tab to the right of the tab-panel:

image

Beside the two checks you've already mentioned, we also want to have some semantic checks. In summary:

  • Title
  • Description
  • Headline Count in Element (loop object by fielddefinition and documents by elements and filter wysiwyg, input elements)
  • Keyword/Keyphrase Density
  • Performance
  • ...

Technically all those "Modules" should be available as configurable and self-sustainable elements like the integrators already are. I think about a tagged symfony service and also a corresponding extjs object, for example:

Service

    SeoBundle\MetaData\Analysis\TitleDescriptionAnalyser:
        tags:
            - {name: seo.meta_data.analyser, identifier: title_description }

Php Class

<?php

namespace SeoBundle\MetaData\Analysis;

class TitleDescriptionAnalyser implements AnalyserInterface
{
    /**
     * {@inheritdoc}
     */
    public function analyse(array $elements, array $context)
    {
        return [];
    }
}

Extjs Module

pimcore.registerNS('Seo.MetaData.Analysis.TitleDescriptionAnalyser');
Seo.MetaData.Analysis.TitleDescriptionAnalyser = Class.create(Seo.MetaData.Analysis.AbstractAnalyser, {
 
    buildPanel: function () {
        return fields;
    },

    getRanking: function () {
        return 0;
    }

});

Controller

<?php

namespace SeoBundle\Controller\Admin;

class MetaDataController extends AdminController
{
    public function analyseElement(Request $request)
    {
        $data = [];
        $element = null; // @todo

        foreach($this->analysisManager->getAnalysers() as $name => $analyser) {
            $data[$name] = $analyser->analyse($element);
        }

        return $this->json([
            'data' => $data,
            'score' => $this->analysisManager->calculateScore($data)
        ]);
    }
}

But I'm not sure if we need a php class at all, since the analysis should work in real-time and with unpublished content. We should do some benchmark tests and POC first (change listener on all inputs could be a performance issue in extjs but also
watching the iframe element in document context could be a tricky one.)


However, this is just a rough idea how we could achieve this. For now, we should implement the basic structure + your suggested title/description module. There is no active sprint for this feature therefor we need to discuss this internally first.

Yea, yoast did put up a really good tool for clients :D

But thats very promising and looks like a good direction.
I could imagine a two-path analysis:

  • you already have a word-count, this could be extended with an condition, if number in range then green. This should normally not be too performance heavy
  • Then the semantic check, as you mentioned, should be analyzed with php because of easier extensibility.

Would it performance-wise make sense, to put all the data into the localstorage on-edit and then the sementic checker pulls it from there asynchronosly on-change:localstorage [element-id] -> semantic check. This should then remove your iframe issue. I am doing the same thing with my PageBuilder-Bundle and it currently seems to work without major speed-implications


Do you need any help with building that feature?

Is this still planned? :)