Дружественные URL поисковой системы, которые содержат числа … хороший или плохой?

Я сделал веб-сайт, который имеет иерархическую структуру и имеет URL дружественной поисковой системы (SEF) как:

/seeds-1/
/seeds-1/fruits-2/
/seeds-1/fruits-2/black-berries-5/
/seeds-1/fruits-2/blue-berries-6/
/seeds-1/fruits-2/strawberries-7/
/seeds-1/vegetables-3/
/seeds-1/vegetables-3/potato-8/
/seeds-1/vegetables-3/onion-9/
/seeds-1/vegetables-3/cabbage-10/
/seeds-1/flowers-4/
/seeds-1/flowers-4/red-rose-11/
/seeds-1/flowers-4/tulips-12/

и так далее. Вы заметите, что числа в конце являются идентификаторами. Теперь, когда я сделан с веб-сайтом, и все, "консультант" вмешивается и говорит моему клиенту, что "... URL не являются 100%-й дружественной поисковой системой, для создания их 100%-й поисковой системой дружественный, числа должны быть удалены...". Я, очевидно, не могу говорить с "консультантом", поскольку они сделали свое задание и исчезли.

Я буду теперь ценить, если кто-то может указать на За и против для обоих типов URL. Мне нужны некоторые твердые аргументы для убеждения клиента плюс, я действительно должен знать, сделал ли я ошибку при выборе этого вида схемы URL моего веб-сайта.

Редактирование----

Может быть я ленив. Переписать правила похожи:

RewriteRule ^[^/]+-([0-9]+)/$ object.php?ObjectID=$1
RewriteRule ^[^/]+-([0-9]+)/[^/]+-([0-9]+)/$ object.php?ObjectID=$2
.
.
.

Его довольно легкое для извлечения ObjectID из строки запроса снимите его в качестве целого числа и используйте его в SQL-запросе. Я думаю с помощью текстового сравнения в запросах (ГДЕ Имя = '%s'), медленнее по сравнению с использованием целочисленного сравнения (ГДЕ ObjectID = %d), поэтому я колеблюсь. Вопрос больше похож, это стоящий создания URL более человечески-благоприятными за счет создания их меньше кодирования/производительности дружественный.

5
задан Salman A 26 December 2017 в 17:49
поделиться

4 ответа

Согласитесь с херувимами, и мы будем расширяться.

Здесь следует учесть две вещи -

Дружественность к человеку - это один момент ... если ваш пользователь хочет ввести овощи / лук / видалия вместо овощей / лука-10, то это, очевидно, имеет больше смысла для конечного пользователя .

Кроме того, поисковая система также может уловить немного больше деталей ... так что поиск по запросу vidalia onion может повысить рейтинг вашего веб-сайта.

В конце концов, консультант продвигает модное слово «удобочитаемость». Да, это, вероятно, в целом лучше в долгосрочной перспективе (и должно быть так же просто, как написать небольшой хороший файл .htaccess для исправления), но на самом деле в вашей настройке нет ничего плохого.

Править

Честно говоря, все сводится к тому, чего хочет ваш клиент. Как указали и другие пользователи, на самом деле нет большой разницы в производительности в том, как вы представляете ссылки ...

Что действительно важно сейчас, так это то, хочет ли ваш клиент, чтобы это было представлено. Их волнует, читается ли такая информация людьми? Если они просто собираются прислушаться к совету консультанта, тогда вы можете просто реализовать свои правила перезаписи.

4
ответ дан 14 December 2019 в 01:07
поделиться

Вы можете найти эту статью интересной:

http://www.codemaestro.com/reviews/9

Она описывает, как квадратный корень был вычислен в Quake 3 engine, утверждая, что на некоторых CPU он работал в 4 раз быстрее, чем функция sqrt (). Не уверен, даст ли он вам повышение производительности в C++ в настоящее время - но все еще интересное чтение

-121--2288827-

Когда я начал думать о том, как «жениться» на MVVM и RX, первое, что я подумал о ObservableCommand:

public class ObservableCommand : ICommand, IObservable<object>
{
    private readonly Subject<object> _subj = new Subject<object>();

    public void Execute(object parameter)
    {
        _subj.OnNext(parameter);
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;

    public IDisposable Subscribe(IObserver<object> observer)
    {
        return _subj.Subscribe(observer);
    }
}

Но тогда я подумал, что «стандартный» способ MVVM связывания элементов управления со свойствами ICommand не является RX больше касается событий, и прослушивание события Executed routed представляется подходящим. Вот что я придумал:

1) У вас есть поведение CommandRelay, которое вы устанавливаете в корне каждого пользовательского элемента управления, который должен отвечать на команды:

public class CommandRelay : Behavior<FrameworkElement>
{
    private ICommandSink _commandSink;

    protected override void OnAttached()
    {
        base.OnAttached();
        CommandManager.AddExecutedHandler(AssociatedObject, DoExecute);
        CommandManager.AddCanExecuteHandler(AssociatedObject, GetCanExecute);
        AssociatedObject.DataContextChanged 
          += AssociatedObject_DataContextChanged;
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        CommandManager.RemoveExecutedHandler(AssociatedObject, DoExecute);
        CommandManager.RemoveCanExecuteHandler(AssociatedObject, GetCanExecute);
        AssociatedObject.DataContextChanged 
          -= AssociatedObject_DataContextChanged;
    }

    private static void GetCanExecute(object sender, 
        CanExecuteRoutedEventArgs e)
    {
        e.CanExecute = true;
    }

    private void DoExecute(object sender, ExecutedRoutedEventArgs e)
    {
        if (_commandSink != null)
            _commandSink.Execute(e);
    }

    void AssociatedObject_DataContextChanged(
       object sender, DependencyPropertyChangedEventArgs e)

    {
        _commandSink = e.NewValue as ICommandSink;
    }
}

public interface ICommandSink
{
    void Execute(ExecutedRoutedEventArgs args);
}

2) ViewModel, обслуживающий контроль за работой пользователей, унаследован от ReactiveViewModel:

    public class ReactiveViewModel : INotifyPropertyChanged, ICommandSink
    {
        internal readonly Subject<ExecutedRoutedEventArgs> Commands;

        public ReactiveViewModel()
        {
            Commands = new Subject<ExecutedRoutedEventArgs>();
        }

...
        public void Execute(ExecutedRoutedEventArgs args)
        {
            args.Handled = true;  // to leave chance to handler 
                                  // to pass the event up
            Commands.OnNext(args);
        }
    }

3) Элементы управления не привязываются к свойствам ICommand, а вместо них используются свойства RoutedCommand:

public static class MyCommands
{
    private static readonly RoutedUICommand _testCommand 
       = new RoutedUICommand();
    public static RoutedUICommand TestCommand 
      { get { return _testCommand; } }
}

И в XAML:

<Button x:Name="btn" Content="Test" Command="ViewModel:MyCommands.TestCommand"/>

В результате, на вашей ViewModel вы можете слушать команды очень RX способом:

    public MyVM() : ReactiveViewModel 
    {
        Commands
            .Where(p => p.Command == MyCommands.TestCommand)
            .Subscribe(DoTestCommand);
        Commands
            .Where(p => p.Command == MyCommands.ChangeCommand)
            .Subscribe(DoChangeCommand);
        Commands.Subscribe(a => Console.WriteLine("command logged"));
    }

Теперь у вас есть сила маршрутизируемых команд (вы можете свободно выбирать обработку команды для любой или даже нескольких ViewModel в иерархии), плюс у вас есть «единый поток» для всех команд, который меньше для RX, чем для отдельных IObservable.

-121--1384702-

С технической точки зрения числовые идентификаторы необходимы только в том случае, если ключевые слова не являются уникальными в их контекстах.

Это имеет место, если, например, на первом уровне может быть несколько начальных значений . Тогда вам понадобится числовой идентификатор (или другое уникальное значение), чтобы различать различные начальные числа :

/seeds-1/…
/seeds-2/…
 ⋮

Но если все ключевые слова уникальны в своих контекстах (пути уникальны), то вы можете удалить числовой идентификатор без потери информации.

1
ответ дан 14 December 2019 в 01:07
поделиться

Поисковые запросы "семена", "цветы", "овощи" и т.д. будут соответствовать URL, так что URL хорошие и движки будут их хорошо обрабатывать.

Хотите ли вы сделать их более дружелюбными к человеку - это уже другой вопрос.

3
ответ дан 14 December 2019 в 01:07
поделиться

Нет ничего плохого в наличии идентификатора в URL-адресе. Это делается повсюду. Например:

  1. Здесь, в Stack Overflow (/ questions / 2264708 / search -...) или
  2. Amazon ( http://www.amazon.com/Code-Complete -Practical-Handbook-Construction / dp / 0735619670 /)

Это всего лишь два примера и их больше. Встраивание идентификаторов в URL-адреса почти повсеместно, особенно для крупных сайтов или больших наборов данных, где сравнение строк в слагах обходится дорого.

Это совершенно не повредит SEO. Это может быть немного менее удобно, потому что пользователи не могут «угадать» URL-адреса, но это совсем другая проблема.

1
ответ дан 14 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: