Islandora / documentation

Contains islandora's documentation and main issue queue.
MIT License
104 stars 71 forks source link

Meta-Issue: SEO #882

Open dannylamb opened 6 years ago

dannylamb commented 6 years ago

This largely depends on having a 'default metadata profile' (the stuff of legends!), but we should be shipping with the metatag module and an assortment of its profile specific modules for things like AMP support, twitter/facebook embedding, etc...

https://www.drupal.org/project/metatag

We should also provide xml sitemap capabilities, as they have proven invaluable in 7.x development.

https://www.drupal.org/project/simple_sitemap

That sweet sweet SEO juice should be an out-of-the-box feature for CLAW.

bryjbrown commented 5 years ago

@dannylamb I've been playing around with these modules and feel like I've got a pretty good handle on them and how they could be used for Islandora 8. Both modules should work out of the box with custom content types.

How do we proceed with this? I could write up documentation for how to configure them. I could also try to export some example configurations for islandora_demo but that would require making these modules a dependency. How do we feel about that?

bryjbrown commented 5 years ago

Google Scholar also prefers for IRs to have access to lists of all content published in a certain year, which we accomplished in 7.x by having a basic page with links to canned Solr searches. Not sure if this would be a good thing to do programmatically in 8.x or just mention it in documentation.

Another option would be to create some sort of islandora_seo module that requires simple_sitemap and metatag, and it could even included a setup checklist (using the Checklist API and Tour). We've talked about doing something similar with Scholar (not wanting to lose the name recognition of Scholar but also not wanting to build a mega-package) to make it more of an "IR Starter Kit" that points to other generic modules instead of a rabbit hole of related functionality.

seth-shaw-unlv commented 5 years ago

I like @bryjbrown's suggestion of making this a separate islandora_seo module that can be pulled in or forked as necessary.

dannylamb commented 5 years ago

:+1: to decoupling from the metadata profile if possible. If you can throw up some default or demo config, I'd love to see it.

Also,

Google Scholar also prefers for IRs to have access to lists of all content published in a certain year, which we accomplished in 7.x by having a basic page with links to canned Solr searches. Not sure if this would be a good thing to do programmatically in 8.x or just mention it in documentation.

The answer you seek is views @bryjbrown

seth-shaw-unlv commented 5 years ago

As it currently stands, Islandora 8 Demo uses the RDF mapping to embed RDFa into Repository Item and the Controlled Access Term pages which can be used by search engines (at least Google and Bing) without the need to metatag. However, the typed relations and @type override only apply to the JSON-LD serialization, which means our more granular relationships and types don't appear in the RDFa. (Because the RDF module didn't have any hooks to support this while the JSON-LD module did.)

I can see two possible ways of addressing this:

  1. adding the JSON-LD serialization into our pages so search engines can use it (Bing can use JSON-LD and Google prefers for JSON-LD), OR
  2. duplicating our JSON-LD-based property rewrites as custom metatag module extensions.

P.S. If we pursued pushing the JSON-LD into the HTML page, then we would need to remove the _format=jsonld from the identifier, as per #887, to avoid confusing the search engine as to what the JSON-LD is describing.

P.P.S. Most of the references to Bing suggest JSON-LD is only supported for Schema.org, not Dublin Core (although I can't find anything conclusive) and, as per #1074, we can't really mix Schema.org with Dublin Core without making Google grumpy. So perhaps we need metatag to get our Dublin Core into Bing while using JSON-LD for Google? That feels excessive...

dannylamb commented 5 years ago

I cannot give enough :+1:'s for option 1. Scrub _format=jsonld from all the URLs AND make Google happy? YES PLEASE.

hachacha commented 2 years ago

Just checking on this one, has option 1 from @seth-shaw-unlv 's solution been added to the codebase ? This issue remains open but it seems like it may have been resolved here: https://github.com/Islandora/documentation/issues/887

seth-shaw-unlv commented 2 years ago

@hachacha. the URLs portion was addressed as you point out. However, I don't believe we add the JSON-LD to the page headers yet.

Further, while I initially thought we could use a src link <script type="application/ld+json" src="https://future.islandora.ca/node/9?_format=jsonld" /> all the examples I've found include the json ld embedded in the script tag like so:

<script type="application/ld+json">
{"@graph":[{"@id":"https://future.islandora.ca/node/9","@type":["http://pcdm.org/models#Object","http://purl.org/coar/resource_type/c_c513"],"http://schema.org/author":[{"@id":"https://future.islandora.ca/user/1"}],"http://purl.org/dc/terms/title":[{"@value":"Grey and White Tabby Kitten","@language":"en"}],"http://schema.org/dateCreated":[{"@value":"2019-06-04T14:46:17+00:00","@type":"http://www.w3.org/2001/XMLSchema#dateTime"}],"http://schema.org/dateModified":[{"@value":"2019-06-05T04:05:52+00:00","@type":"http://www.w3.org/2001/XMLSchema#dateTime"}],"http://purl.org/dc/terms/description":[{"@value":"A worried-looking kitten. ","@language":"en"}],"http://purl.org/dc/terms/created":[{"@value":"2019-04-19","@type":"http://www.w3.org/2001/XMLSchema#string"},{"@value":"2019-04-19","@type":"http://www.w3.org/2001/XMLSchema#date"}],"http://purl.org/dc/terms/extent":[{"@value":"1 item","@type":"http://www.w3.org/2001/XMLSchema#string"}],"http://pcdm.org/models#memberOf":[{"@id":"https://future.islandora.ca/node/7"}],"http://purl.org/dc/terms/type":[{"@id":"https://future.islandora.ca/taxonomy/term/5"}],"http://purl.org/dc/terms/subject":[{"@id":"https://future.islandora.ca/taxonomy/term/27"}],"http://schema.org/sameAs":[{"@id":"https://future.islandora.ca/node/9"}]},{"@id":"https://future.islandora.ca/user/1","@type":["http://schema.org/Person"]},{"@id":"https://future.islandora.ca/node/7","@type":["http://pcdm.org/models#Object"]},{"@id":"https://future.islandora.ca/taxonomy/term/5","@type":["http://schema.org/Thing"]},{"@id":"https://future.islandora.ca/taxonomy/term/27","@type":["http://schema.org/Thing"]}]}
</script>

I don't know how kindly Google will take to simply adding the link as initially suggested.

alxp commented 2 years ago

For the RDM project, we used schema.org Metatag module which converts metatags into JSON-LD i the header.