如何为从相同链接派生的页面添加规范标记?

Man*_*j H 5 seo symfony1 hyperlink canonical-link

我正在使用symfony 1.0.6.

在我的网站中,我有两个网址.

http://newe4s.com/news/articles/view/033/job-news-and-information
Run Code Online (Sandbox Code Playgroud)

http://newe4s.com/news/articles/view/033/job-news-and-information/graduate/Connections-help-graduates-get-jobs
Run Code Online (Sandbox Code Playgroud)

现在,所有新文章都使用相同的布局,上面的两个链接都从数据库中获取相同的数据.Google正在报告重复内容,因为它获取了相同内容的多个网址.当我搜索解决方案时,我得到了使用"规范"结构修复了这个需要的问题

<link rel="canonical" href="http://newe4s.com/news/articles/view/033/job-news-and-information />
Run Code Online (Sandbox Code Playgroud)

在页面的头部添加

http://newe4s.com/news/articles/view/033/job-news-and-information/graduate/Connections-help-graduates-get-jobs
Run Code Online (Sandbox Code Playgroud)

但问题是,两者都使用相同的布局并基于文章ID(上例中为033),数据被提取和显示.我不能改变或硬编码规范href.

有没有办法在action.class或模板文件中手动添加链接标记?

j0k*_*j0k 2

根据旧票(基于旧 symfony 论坛中的旧线程) - 指向最终来源,您可以轻松创建一个帮助程序,将链接标记添加到您的页面(例如/lib/helper/CanonicalHelper.php):

/**
* Add link tag to slot 'links'
*
* @param String $href [Absolute or internat URI]
* @param String $rel [value for 'rel' attribtue, e.g. 'canonical']
*
* @return void
*/
function add_link($href, $rel)
{
  $slot = get_slot('links');

  try {
    $href = url_for($href, true);
    $slot .= "\n<link rel=\"$rel\" href=\"$href\" />";
  } catch (InvalidArgumentException $e) {
    $slot .= "\n<!-- Could not add Link '$href': Only absolute or internal URIs allowed -->";
  }

  slot('links', $slot);
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在你的模板中调用它:

<?php add_link(
  'http://newe4s.com/news/articles/view/033/job-news-and-information',
  'canonical'
); ?>
Run Code Online (Sandbox Code Playgroud)

最后,不要忘记在您的中添加插槽layout.php

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Title</title>
    <link rel="shortcut icon" href="/favicon.ico" />
    <?php include_javascripts() ?>
    <?php include_stylesheets() ?>
    <?php include_slot('links'); ?>
  </head>
Run Code Online (Sandbox Code Playgroud)

如果您想从 中添加它actions,它也在博客文章中定义。

编辑:

如果您创建一个名为 的助手,当您想要使用函数CanonicalHelper.php时不要忘记包含它:add_link

<?php use_helper('Canonical') ?>
Run Code Online (Sandbox Code Playgroud)