{"id":356108,"date":"2026-08-24T07:13:18","date_gmt":"2026-08-24T07:13:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sev-simple-hreflang\/"},"modified":"2026-08-24T09:33:32","modified_gmt":"2026-08-24T09:33:32","slug":"sev-simple-hreflang","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sev-simple-hreflang\/","author":15085268,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.0","stable_tag":"1.3.0","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"SEV Simple hreflang","header_author":"sevmatic","header_description":"Adds hreflang alternates for pages, posts, and categories, outputs them as <link rel=\"alternate\"> in <head> including a self-referencing link, and offers a Language Link block for the Navigation block.","assets_banners_color":"19565f","last_updated":"2026-08-24 09:33:32","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/sevmatic.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":52,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.0":{"tag":"1.2.0","author":"hfranz","date":"2026-08-24 07:12:55"},"1.3.0":{"tag":"1.3.0","author":"hfranz","date":"2026-08-24 09:33:32"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon.svg":{"filename":"icon.svg","revision":3663043,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500-de.png":{"filename":"banner-1544x500-de.png","revision":3663043,"resolution":"1544x500","location":"assets","locale":"de","width":1544,"height":500},"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3663043,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250-de.png":{"filename":"banner-772x250-de.png","revision":3663043,"resolution":"772x250","location":"assets","locale":"de","width":772,"height":250},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3663043,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.0","1.3.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Sidebar panel in the block editor"}},"plugin_section":[],"plugin_tags":[6904,2993,99,1753,186],"plugin_category":[43,48,55],"plugin_contributors":[202978],"plugin_business_model":[],"class_list":["post-356108","plugin","type-plugin","status-publish","hentry","plugin_tags-alternate","plugin_tags-hreflang","plugin_tags-multilingual","plugin_tags-navigation","plugin_tags-seo","plugin_category-customization","plugin_category-language-tools","plugin_category-seo-and-marketing","plugin_contributors-hfranz","plugin_committers-hfranz"],"banners":{"banner":"https:\/\/ps.w.org\/sev-simple-hreflang\/assets\/banner-772x250.png?rev=3663043","banner_2x":"https:\/\/ps.w.org\/sev-simple-hreflang\/assets\/banner-1544x500.png?rev=3663043","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/sev-simple-hreflang\/assets\/icon.svg?rev=3663043","icon":"https:\/\/ps.w.org\/sev-simple-hreflang\/assets\/icon.svg?rev=3663043","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>SEV Simple hreflang adds a field to pages, posts, and categories where you can enter any number of alternate-language versions (hreflang + URL). The plugin automatically outputs these as <code>&lt;link rel=\"alternate\" hreflang=\"\u2026\"&gt;<\/code> tags in the <code>&lt;head&gt;<\/code> of the corresponding view \u2014 including a self-referencing link to the page itself, as recommended by Google.<\/p>\n\n<p><strong>Why no block for the hreflang tags themselves?<\/strong><\/p>\n\n<p>hreflang annotations are only evaluated by search engines in the <code>&lt;head&gt;<\/code> (or via HTTP header or sitemap), not in the visible page content. A block inserted into the content would end up in the <code>&lt;body&gt;<\/code> and simply be ignored. That's why this plugin deliberately uses post\/term meta for the hreflang data itself, instead of a block.<\/p>\n\n<p><strong>Language Link block for the Navigation block<\/strong><\/p>\n\n<p>For block themes, the plugin also adds a \"hreflang Language Link\" block that can be inserted inside the Navigation block. Set the target language (e.g. <code>en-US<\/code>) and the block links to the current page's hreflang alternate for that language. If the current page has no matching alternate, the menu item is left out of the navigation entirely \u2014 not just hidden.<\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li>Sidebar panel in the block editor for pages and posts.<\/li>\n<li>Dedicated form field when adding\/editing categories (there's no block editor there).<\/li>\n<li>Also supports the static \"Posts page\" (Settings &gt; Reading).<\/li>\n<li>Automatic self-referencing hreflang link, based on the site's language.<\/li>\n<li>Language Link block for the Navigation block, shown only where a translation exists.<\/li>\n<li>No settings, no external calls \u2014 just activate it.<\/li>\n<\/ul>\n\n<p><strong>Multisite<\/strong><\/p>\n\n<p>The plugin is fully multisite-compatible. It can be network-activated (active on every site) or activated per site individually, whichever fits your setup \u2014 each site keeps its own hreflang data, since post\/term meta is already scoped per site.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>sev-simple-hreflang<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu in WordPress.<\/li>\n<li>When editing a page\/post: open the sidebar, expand the \"hreflang (alternate language versions)\" panel. For categories: the field is directly in the form.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20don%27t%20i%20see%20a%20block%20for%20hreflang%20tags%20in%20the%20editor%3F\"><h3>Why don't I see a block for hreflang tags in the editor?<\/h3><\/dt>\n<dd><p>There deliberately isn't one. hreflang tags must live in <code>&lt;head&gt;<\/code>, not in the content \u2014 a content block would be ignored by search engines.<\/p><\/dd>\n<dt id=\"can%20i%20add%20a%20language%20switcher%20to%20my%20navigation%20menu%3F\"><h3>Can I add a language switcher to my navigation menu?<\/h3><\/dt>\n<dd><p>Yes, if your theme is a block theme. Add the \"hreflang Language Link\" block inside the Navigation block, set the target hreflang code (e.g. <code>en-US<\/code>), and it links to the current page's matching alternate. Pages without a matching alternate simply don't show that menu item.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20wpml%2Fpolylang%3F\"><h3>Does this work with WPML\/Polylang?<\/h3><\/dt>\n<dd><p>The plugin works independently of multilingual plugins and manages hreflang values manually per page\/post\/category. If WPML or Polylang is active and already outputs hreflang, you may end up with duplicate tags \u2014 in that case, please use only one of the two solutions.<\/p><\/dd>\n<dt id=\"is%20x-default%20supported%3F\"><h3>Is x-default supported?<\/h3><\/dt>\n<dd><p>Yes \u2014 the hreflang field is a free-text field, so <code>x-default<\/code> can be entered directly.<\/p><\/dd>\n<dt id=\"does%20this%20work%20on%20multisite%3F\"><h3>Does this work on Multisite?<\/h3><\/dt>\n<dd><p>Yes. The plugin can be network-activated or activated per site; each site manages its own hreflang data independently.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Remove local de_DE translation files from the repository; translations are now maintained on translate.wordpress.org.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Fix broken readme short description caused by literal <code>&lt;head&gt;<\/code> markup being stripped by wp.org.<\/li>\n<li>Exclude translated .po\/.mo\/.json language files from the packaged ZIP; only the .pot source ships, translations are hosted on translate.wordpress.org.<\/li>\n<li>Bump the Language Link block to apiVersion 3 for iframe block editor compatibility (WordPress 6.3+).<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Add \"hreflang Language Link\" block for the Navigation block (block themes), linking to the current page's alternate for a chosen language and omitted when no matching alternate exists.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Adds hreflang alternates for pages, posts, and categories and outputs them correctly in the page head \u2014 including a self-referencing link.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/356108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=356108"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hfranz"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=356108"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=356108"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=356108"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=356108"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=356108"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=356108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}