For add Programmatically, first we will work on .theme file, we will create alter attachments in .theme file like 'theme_name_page_attachments_alter(array &$page).
Code for add 'viewport' in html head is..
<?php
function theme name/module name_page_attachments_alter(array &$page) {
$viewport = [
'#type' => 'html_tag',
'#tag' => 'meta',
'#attributes' => [
'name' => 'viewport',
'content' => 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no',
],
];
$page['#attached']['html_head'][] = [$viewport, 'viewport'];
global $base_url;
$current_page = \Drupal::request()->getpathInfo();
$canon_url = $base_url.''.$current_page;
Code for add 'canonical' in html head is..
$viewport_canonical = [
'#type' => 'html_tag',
'#tag' => 'link',
'#attributes' => [
'rel' => 'canonical',
'href' => $canon_url,
],
];
$page['#attached']['html_head'][] = [$viewport_canonical, 'canonical'];
Code for add 'shortlink' in html head is..
$viewport_shortlink = [
'#type' => 'html_tag',
'#tag' => 'link',
'#attributes' => [
'rel' => 'shortlink',
'href' => $canon_url,
],
];
$page['#attached']['html_head'][] = [$viewport_shortlink, 'shortlink'];
For add robots programmatically on site header, we have to work on 'theme_name_preprocess_html(&$variables).
Code for add 'robots' in html head is..
$noindex = [
'#tag' => 'meta',
'#attributes' => [
'name' => 'robots',
'content' => 'noindex, nofollow',
],
];
$variables['page']['#attached']['html_head'][] = [$noindex, 'noindex'];
?>
Note: If have any suggestions or issue regarding 'Programmatically add canonical, shortlink, viewport and robots in site header.' then you can ask by comments.
Code for add 'viewport' in html head is..
<?php
function theme name/module name_page_attachments_alter(array &$page) {
$viewport = [
'#type' => 'html_tag',
'#tag' => 'meta',
'#attributes' => [
'name' => 'viewport',
'content' => 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no',
],
];
$page['#attached']['html_head'][] = [$viewport, 'viewport'];
global $base_url;
$current_page = \Drupal::request()->getpathInfo();
$canon_url = $base_url.''.$current_page;
Code for add 'canonical' in html head is..
$viewport_canonical = [
'#type' => 'html_tag',
'#tag' => 'link',
'#attributes' => [
'rel' => 'canonical',
'href' => $canon_url,
],
];
$page['#attached']['html_head'][] = [$viewport_canonical, 'canonical'];
Code for add 'shortlink' in html head is..
$viewport_shortlink = [
'#type' => 'html_tag',
'#tag' => 'link',
'#attributes' => [
'rel' => 'shortlink',
'href' => $canon_url,
],
];
$page['#attached']['html_head'][] = [$viewport_shortlink, 'shortlink'];
For add robots programmatically on site header, we have to work on 'theme_name_preprocess_html(&$variables).
Code for add 'robots' in html head is..
$noindex = [
'#tag' => 'meta',
'#attributes' => [
'name' => 'robots',
'content' => 'noindex, nofollow',
],
];
$variables['page']['#attached']['html_head'][] = [$noindex, 'noindex'];
?>
Note: If have any suggestions or issue regarding 'Programmatically add canonical, shortlink, viewport and robots in site header.' then you can ask by comments.