The Metatag documentation gives an example of setting meta tags like this:
$node->set('field_meta_tags', serialize([
'title' => 'Some title',
'description' => 'Some description.',
'keywords' => 'Some,Keywords',
]));
However, I want to set the "advanced" fields, such as Canonical URL. (Use case: I am trying to import several hundred pages with the Feeds module, some of which are very similar, so I want to automatically set the canonical URL for the similar pages.)
I tried to get the name of the key to serialize by setting the canonical URL for a node in the UI, saving the node, and then dumping the result of field_metatags
, but this was the result:
www.example.com a:4:{s:5:"@type";s:6:"Person";s:3:"@id";s:39:"https://www.example.com/bio";s:4:"name";s:12:"Person's name";s:3:"url";s:39:"https://www.example.com/my-bio";}
Here, the first www.example.com
is the value I set for canonical URL, but this does not give me a hint of what to use to set the canonical URL.
How can I set the values of the "advanced" metatags programmatically?
Similar questions
This question asks about setting the canonical URL but it is for Drupal 7 and concerns pre-processing the canonical URL before display, whereas I want to set the metatag canonical URL when saving the node in Drupal 9.
letter:number
usually are PHP serialized data structures (complex data structures serialized into one single string), e.g.a:4
means ana
rray of length4
, ans:5
is as
tring of length5
, etc. You should be able to decode and get read-/var_dump-able keynames and values using PHP unserialize() first.