Referenced AMP URL is not an AMP
-
Hello experts, from last few days I’m getting this error “Referenced AMP URL is not an AMP” on Google Search Console even my whole website amp is working fine let suppose if you check this page: https://www.vpnranks.com/reviews/vyprvpn/amp/ its working fine but if you check this page: https://www.vpnranks.com/reviews/vyprvpn/kodi/amp/ it redirect to non-amp page or if we visit this URL https://www.vpnranks.com/reviews/vyprvpn/kodi/?amp/ it show proper amp can anyone help me to fix this issue, I’m really stucked in this issue from last few days.
The page I need help with: [log in to see the link]
-
We checked your issue. The /amp is redirecting to the non-amp. That’s’ why google is giving this error “Referenced AMP URL is not an AMP”.
The amp URL is 301 redirecting to the homepage, Like this: https://prnt.sc/ubiy4t
Can you please tell me are you set up 301 somewhere?@ahmedkaludi no i haven’t done any kind of redirection 301 on these pages but i want to tell you one more thing that those post redirecting to non-amp version are child post like:
Parent Post: https://www.vpnranks.com/reviews/vyprvpn/
Child Post: https://www.vpnranks.com/reviews/vyprvpn/kodi/
Parent post AMP version working fine but child post amp redirecting to non-amp i am sending you code which i use to create this custom posts hierarchy.add_action('registered_post_type', 'make_posts_hierarchical', 10, 2 ); // Runs after each post type is registered function make_posts_hierarchical($post_type, $pto){ // Return, if not post type posts if ($post_type != 'post') return; // access $wp_post_types global variable global $wp_post_types; // Set post type "post" to be hierarchical $wp_post_types['post']->hierarchical = 1; // Add page attributes to post backend // This adds the box to set up parent and menu order on edit posts. add_post_type_support( 'post', 'page-attributes' ); } /** * Get parent post slug * * Helpful function to get the post name of a posts parent */ function get_parent_post_slug($post) { if (!is_object($post) || !$post->post_parent) { return false; } return get_post($post->post_parent)->post_name; } /** * * Edit View of Permalink * * This affects editing permalinks, and $permalink is an array [template, replacement] * where replacement is the post_name and template has %postname% in it. * **/ add_filter('get_sample_permalink', function($permalink, $post_id, $title, $name, $post) { if ($post->post_type != 'post' || !$post->post_parent) { return $permalink; } // Deconstruct the permalink parts $template_permalink = current($permalink); $replacement_permalink = next($permalink); // Find string if(!is_amp_endpoint()) { $postname_string = '/%postname%/'; }else{ $postname_string = '/%postname%/amp/'; } // Get parent post $parent_slug = get_parent_post_slug($post); $altered_template_with_parent_slug = '/' . $parent_slug . $postname_string; $new_template = str_replace($postname_string, $altered_template_with_parent_slug, $template_permalink); $new_permalink = [$new_template, $replacement_permalink]; return $new_permalink; }, 99, 5); /** * Alter the link to the post * * This affects get_permalink, the_permalink etc. * This will be the target of the edit permalink link too. * * Note: only fires on "post" post types. */ add_filter('post_link', function($post_link, $post, $leavename){ if ($post->post_type != 'post' || !$post->post_parent) { return $post_link; } $parent_slug = get_parent_post_slug($post); $new_post_link = str_replace($post->post_name, $parent_slug . '/' . $post->post_name, $post_link); return $new_post_link; }, 99, 3); /** * Before getting posts * * Has to do with routing... adjusts the main query settings * */ add_action('pre_get_posts', function($query){ global $wpdb, $wp_query; $original_query = $query; $uri = $_SERVER['REQUEST_URI']; // Do not do this post check all the time if ( $query->is_main_query() && !is_admin()) { // get the post_name $basename = basename($uri); // find out if we have a post that matches this post_name $test_query = sprintf("select * from $wpdb->posts where post_type = '%s' and post_name = '%s';", 'post', $basename); $result = $wpdb->get_results($test_query); // if no match, return default query, or if there's no parent post, this is not necessary if (!($post = current($result)) || !$post->post_parent) { return $original_query; } // get the parent slug $parent_slug = get_parent_post_slug($post); // concat the parent slug with the post_name to get most of the url $hierarchal_slug = $parent_slug . '/' . $post->post_name; // if the concat of parent-slug/post-name is not in the uri, this is not the right post. if (!stristr($uri, $hierarchal_slug)) { return $original_query; } // pretty high confidence that we need to override the query. $query->query_vars['post_type'] = ['post']; $query->is_home = false; $query->is_page = true; $query->is_single = true; $query->queried_object_id = $post->ID; $query->set('page_id', $post->ID); return $query; } }, 1);
@ahmedkaludi I’m Waiting for your response kindly let me know if you have some kind of solution for that problem, i think that issue is because of Child post permalink can you help us out thanks
Since you have added a custom code and permalink structure, you have two options:
1. Either you create a custom rewrite rule for this permalink
or
2. Use /?amp as an endpoint from the setting + Add the image for this.@ahmedkaludi can you help me to do this: 1. Either you create a custom rewrite rule for this permalink
because i can’t found a way to do this kind of stuff looking forward for your response
The first option is the complex and the second option is easy. If you set up /?amp as an endpoint on your child post page it works perfectly like this: https://prnt.sc/uctq5f
We checked your page. Currently, it’s a valid AMP page. The Child Post page is redirecting to the AMP page : https://prnt.sc/ucykxy
- The topic ‘Referenced AMP URL is not an AMP’ is closed to new replies.